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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/soundstudiopro.com/private_html/fix_track_313_variations.php
<?php
/**
 * Fix Track 313 Missing Variations
 * Automatically restores missing variations from API.Box or task_results
 */

error_reporting(E_ALL);
ini_set('display_errors', 1);

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

$pdo = getDBConnection();
if (!$pdo) {
    die("<h2>❌ Database connection failed</h2>");
}

$track_id = 313;

echo "<h2>🔧 Fixing Track #313 Variations</h2>";
echo "<style>
    body { font-family: Arial, sans-serif; padding: 20px; background: #0a0a0a; color: #fff; }
    .section { background: rgba(255,255,255,0.05); padding: 20px; margin: 20px 0; border-radius: 12px; border: 1px solid rgba(102,126,234,0.3); }
    .error { color: #f59e0b; }
    .success { color: #48bb78; }
    .info { color: #667eea; }
    pre { background: rgba(0,0,0,0.3); padding: 15px; border-radius: 8px; overflow-x: auto; }
</style>";

// Get track info
try {
    $stmt = $pdo->prepare("SELECT id, title, task_id, variations_count FROM music_tracks WHERE id = ?");
    $stmt->execute([$track_id]);
    $track = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$track) {
        die("<div class='section error'><h3>❌ Track #313 not found</h3></div>");
    }
    
    echo "<div class='section'>";
    echo "<h3>📊 Track Info</h3>";
    echo "<p><strong>Title:</strong> " . htmlspecialchars($track['title']) . "</p>";
    echo "<p><strong>Task ID:</strong> " . htmlspecialchars($track['task_id'] ?? 'N/A') . "</p>";
    echo "<p><strong>Expected variations:</strong> {$track['variations_count']}</p>";
    echo "</div>";
    
    // Get current variations count
    $stmt = $pdo->prepare("SELECT COUNT(*) as count FROM audio_variations WHERE track_id = ?");
    $stmt->execute([$track_id]);
    $current = $stmt->fetch(PDO::FETCH_ASSOC);
    $current_count = (int)$current['count'];
    
    echo "<div class='section'>";
    echo "<h3>🔍 Current State</h3>";
    echo "<p>Variations in database: <strong>{$current_count}</strong></p>";
    
    if ($current_count >= $track['variations_count']) {
        echo "<p class='success'>✅ All variations are already stored!</p>";
        echo "</div>";
        exit;
    }
    
    echo "<p class='error'>⚠️ Missing " . ($track['variations_count'] - $current_count) . " variation(s)</p>";
    echo "</div>";
    
    // Download function (defined before use)
    function downloadAndStoreAudio($audioUrl, $taskId, $type = 'main', $variationIndex = null) {
        if (empty($audioUrl) || !filter_var($audioUrl, FILTER_VALIDATE_URL)) {
            return null;
        }
        
        $audioDir = __DIR__ . '/audio_files/';
        if (!is_dir($audioDir)) {
            mkdir($audioDir, 0755, true);
        }
        
        $extension = pathinfo(parse_url($audioUrl, PHP_URL_PATH), PATHINFO_EXTENSION) ?: 'mp3';
        if ($type === 'variation' && $variationIndex !== null) {
            $filename = "{$taskId}_variation_{$variationIndex}.{$extension}";
        } else {
            $filename = "{$taskId}.{$extension}";
        }
        
        $localPath = $audioDir . $filename;
        $webPath = '/audio_files/' . $filename;
        
        if (file_exists($localPath)) {
            return $webPath;
        }
        
        $context = stream_context_create([
            'http' => [
                'timeout' => 300,
                'user_agent' => 'Mozilla/5.0'
            ]
        ]);
        
        $audioContent = @file_get_contents($audioUrl, false, $context);
        if ($audioContent === false) {
            return null;
        }
        
        if (file_put_contents($localPath, $audioContent, LOCK_EX)) {
            chmod($localPath, 0644);
            return $webPath;
        }
        
        return null;
    }
    
    // Try to restore from task_results JSON first
    $restored = false;
    if (!empty($track['task_id'])) {
        $taskResultsFile = __DIR__ . "/task_results/{$track['task_id']}.json";
        if (file_exists($taskResultsFile)) {
            echo "<div class='section'>";
            echo "<h3>📄 Restoring from task_results JSON</h3>";
            
            $jsonContent = file_get_contents($taskResultsFile);
            $callbackData = json_decode($jsonContent, true);
            
            if ($callbackData && isset($callbackData['data']['data']) && is_array($callbackData['data']['data'])) {
                $audioData = $callbackData['data']['data'];
                echo "<p class='info'>Found " . count($audioData) . " variation(s) in JSON file</p>";
                    if (empty($audioUrl) || !filter_var($audioUrl, FILTER_VALIDATE_URL)) {
                        return null;
                    }
                    
                    $audioDir = __DIR__ . '/audio_files/';
                    if (!is_dir($audioDir)) {
                        mkdir($audioDir, 0755, true);
                    }
                    
                    $extension = pathinfo(parse_url($audioUrl, PHP_URL_PATH), PATHINFO_EXTENSION) ?: 'mp3';
                    if ($type === 'variation' && $variationIndex !== null) {
                        $filename = "{$taskId}_variation_{$variationIndex}.{$extension}";
                    } else {
                        $filename = "{$taskId}.{$extension}";
                    }
                    
                    $localPath = $audioDir . $filename;
                    $webPath = '/audio_files/' . $filename;
                    
                    if (file_exists($localPath)) {
                        return $webPath;
                    }
                    
                    $context = stream_context_create([
                        'http' => [
                            'timeout' => 300,
                            'user_agent' => 'Mozilla/5.0'
                        ]
                    ]);
                    
                    $audioContent = @file_get_contents($audioUrl, false, $context);
                    if ($audioContent === false) {
                        return null;
                    }
                    
                    if (file_put_contents($localPath, $audioContent, LOCK_EX)) {
                        chmod($localPath, 0644);
                        return $webPath;
                    }
                    
                    return null;
                }
                
                $pdo->beginTransaction();
                try {
                    // Get existing variation indices
                    $stmt = $pdo->prepare("SELECT variation_index FROM audio_variations WHERE track_id = ?");
                    $stmt->execute([$track_id]);
                    $existing_indices = array_column($stmt->fetchAll(PDO::FETCH_ASSOC), 'variation_index');
                    
                    $storedCount = 0;
                    $variationIndex = 0;
                    
                    foreach ($audioData as $originalIndex => $variation) {
                        // Skip if we already have this index
                        if (in_array($originalIndex, $existing_indices)) {
                            continue;
                        }
                        
                        // Get audio URL from any available field
                        $variationAudioUrl = $variation['audio_url'] ?? $variation['source_audio_url'] ?? $variation['stream_audio_url'] ?? null;
                        
                        if (empty($variationAudioUrl)) {
                            echo "<p class='error'>⚠️ Skipping variation {$originalIndex} - no audio URL</p>";
                            continue;
                        }
                        
                        // Download audio
                        $localVariationUrl = downloadAndStoreAudio($variationAudioUrl, $track['task_id'], 'variation', $variationIndex);
                        
                        // Generate title
                        $variationTitle = $variation['title'] ?? null;
                        if (!$variationTitle) {
                            $titleParts = [];
                            if (!empty($variation['tags'])) {
                                $tags = is_array($variation['tags']) ? $variation['tags'] : explode(',', $variation['tags']);
                                $titleParts = array_slice($tags, 0, 3);
                            }
                            $variationTitle = !empty($titleParts) ? implode(', ', $titleParts) : "Variation " . ($variationIndex + 1);
                        }
                        
                        // Prepare metadata
                        $variationMetadata = [
                            'genre' => $variation['genre'] ?? null,
                            'style' => $variation['style'] ?? null,
                            'bpm' => $variation['bpm'] ?? null,
                            'key' => $variation['key'] ?? null,
                            'mood' => $variation['mood'] ?? null,
                            'energy' => $variation['energy'] ?? null,
                            'instruments' => $variation['instruments'] ?? null,
                            'tags' => $variation['tags'] ?? null,
                            'duration' => $variation['duration'] ?? null,
                            'title' => $variationTitle,
                            'original_index' => $originalIndex
                        ];
                        
                        // Insert variation
                        $stmt = $pdo->prepare("
                            INSERT INTO audio_variations 
                            (track_id, variation_index, audio_url, duration, title, tags, image_url, source_audio_url, stream_audio_url, metadata) 
                            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
                        ");
                        
                        $result = $stmt->execute([
                            $track_id,
                            $originalIndex, // Use original index from API
                            $localVariationUrl ?: $variationAudioUrl,
                            $variation['duration'] ?? null,
                            $variationTitle,
                            is_array($variation['tags']) ? implode(', ', $variation['tags']) : ($variation['tags'] ?? null),
                            $variation['image_url'] ?? null,
                            $variation['source_audio_url'] ?? null,
                            $variation['stream_audio_url'] ?? null,
                            json_encode($variationMetadata)
                        ]);
                        
                        if ($result) {
                            $storedCount++;
                            $variationIndex++;
                            echo "<p class='success'>✅ Stored variation index {$originalIndex}</p>";
                        } else {
                            echo "<p class='error'>❌ Failed to store variation index {$originalIndex}</p>";
                        }
                    }
                    
                    $pdo->commit();
                    $restored = true;
                    
                    echo "<p class='success'><strong>✅ Successfully restored {$storedCount} variation(s)!</strong></p>";
                    
                } catch (Exception $e) {
                    $pdo->rollBack();
                    echo "<p class='error'>❌ Error: " . htmlspecialchars($e->getMessage()) . "</p>";
                }
            } else {
                echo "<p class='error'>❌ Invalid JSON structure in task_results file</p>";
            }
            echo "</div>";
        }
    }
    
    // If not restored from JSON, try API.Box
    if (!$restored && !empty($track['task_id'])) {
        echo "<div class='section'>";
        echo "<h3>☁️ Trying API.Box</h3>";
        
        $api_key = '63edba40620216c5aa2c04240ac41dbd';
        $api_url = "https://api.api.box/api/v1/status/{$track['task_id']}";
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $api_url);
        curl_setopt($ch, CURLOPT_HTTPGET, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Authorization: Bearer ' . $api_key,
            'Content-Type: application/json'
        ]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
        $response = curl_exec($ch);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        
        if ($http_code === 200) {
            $api_data = json_decode($response, true);
            $api_variations = [];
            
            if (isset($api_data['data']['data']) && is_array($api_data['data']['data'])) {
                $api_variations = $api_data['data']['data'];
            } elseif (isset($api_data['data']) && is_array($api_data['data'])) {
                $api_variations = $api_data['data'];
            }
            
            if (!empty($api_variations)) {
                echo "<p class='info'>Found " . count($api_variations) . " variation(s) in API.Box</p>";
                echo "<p class='error'>⚠️ API.Box restore not yet implemented. Please use restore_variations.php or the admin tool.</p>";
            }
        } else {
            echo "<p class='error'>❌ Failed to fetch from API.Box: HTTP {$http_code}</p>";
        }
        echo "</div>";
    }
    
    // Final check
    $stmt = $pdo->prepare("SELECT COUNT(*) as count FROM audio_variations WHERE track_id = ?");
    $stmt->execute([$track_id]);
    $final = $stmt->fetch(PDO::FETCH_ASSOC);
    $final_count = (int)$final['count'];
    
    echo "<div class='section'>";
    echo "<h3>✅ Final Result</h3>";
    echo "<p>Variations now in database: <strong>{$final_count}</strong></p>";
    if ($final_count >= $track['variations_count']) {
        echo "<p class='success'>✅ All variations restored!</p>";
    } else {
        echo "<p class='error'>⚠️ Still missing " . ($track['variations_count'] - $final_count) . " variation(s)</p>";
    }
    echo "<p><a href='/track.php?id={$track_id}' style='color: #667eea;'>View Track Page</a></p>";
    echo "</div>";
    
} catch (Exception $e) {
    echo "<div class='section error'><h3>❌ Error</h3><p>" . htmlspecialchars($e->getMessage()) . "</p></div>";
}

?>


CasperSecurity Mini