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/restore_variations.php
<?php
/**
 * Restore Variations from Callback Data
 * Extracts variations from task_results JSON and stores them in database
 */

session_start();
require_once 'config/database.php';

$confirm = $_GET['confirm'] ?? 'false';
$track_id = intval($_GET['track_id'] ?? 0);

if ($confirm !== 'yes') {
    die("Add ?confirm=yes to URL to proceed");
}

if (!$track_id) {
    die("Track ID required: restore_variations.php?track_id=XXX&confirm=yes");
}

$pdo = getDBConnection();

// Get track info
$stmt = $pdo->prepare("SELECT id, task_id, title FROM music_tracks WHERE id = ?");
$stmt->execute([$track_id]);
$track = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$track) {
    die("Track ID {$track_id} not found");
}

echo "<h2>Restoring Variations for Track ID: {$track_id}</h2>";
echo "<p><strong>Title:</strong> {$track['title']}</p>";
echo "<p><strong>Task ID:</strong> {$track['task_id']}</p>";
echo "<hr>";

// Load task_results JSON
$taskResultsFile = __DIR__ . "/task_results/{$track['task_id']}.json";
if (!file_exists($taskResultsFile)) {
    die("❌ task_results JSON file not found: {$taskResultsFile}");
}

$jsonContent = file_get_contents($taskResultsFile);
$callbackData = json_decode($jsonContent, true);

if (!$callbackData || !isset($callbackData['data']['data']) || !is_array($callbackData['data']['data'])) {
    die("❌ Invalid callback data or no audioData found");
}

$audioData = $callbackData['data']['data'];
echo "<p>✅ Found " . count($audioData) . " variation(s) in callback data</p>";

// Include download function from callback.php
function downloadAndStoreAudio($audioUrl, $taskId, $type = 'main', $variationIndex = null) {
    if (empty($audioUrl) || !filter_var($audioUrl, FILTER_VALIDATE_URL)) {
        return null;
    }
    
    $audioDir = '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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        ]
    ]);
    
    $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 {
    // Clear existing variations
    $stmt = $pdo->prepare("DELETE FROM audio_variations WHERE track_id = ?");
    $stmt->execute([$track_id]);
    echo "<p>✅ Cleared existing variations</p>";
    
    $storedCount = 0;
    $variationIndex = 0;
    
    foreach ($audioData as $originalIndex => $variation) {
        // Check multiple audio URL fields - be more thorough
        $variationAudioUrl = null;
        
        // Try each field, checking if it's not empty string
        if (!empty($variation['audio_url']) && trim($variation['audio_url']) !== '') {
            $variationAudioUrl = trim($variation['audio_url']);
        } elseif (!empty($variation['source_audio_url']) && trim($variation['source_audio_url']) !== '') {
            $variationAudioUrl = trim($variation['source_audio_url']);
        } elseif (!empty($variation['stream_audio_url']) && trim($variation['stream_audio_url']) !== '') {
            $variationAudioUrl = trim($variation['stream_audio_url']);
        }
        
        if (empty($variationAudioUrl)) {
            echo "<p>⚠️ Skipping variation {$originalIndex} - no valid audio URL (checked: audio_url=" . ($variation['audio_url'] ?? 'NULL') . ", source_audio_url=" . ($variation['source_audio_url'] ?? 'NULL') . ", stream_audio_url=" . ($variation['stream_audio_url'] ?? 'NULL') . ")</p>";
            continue;
        }
        
        // Download audio
        $localVariationUrl = downloadAndStoreAudio($variationAudioUrl, $track['task_id'], 'variation', $variationIndex);
        
        // Generate title
        $variationTitle = $variation['title'] ?? null;
        if (!$variationTitle) {
            $titleParts = [];
            if (isset($variation['genre'])) $titleParts[] = $variation['genre'];
            if (isset($variation['style'])) $titleParts[] = $variation['style'];
            if (isset($variation['mood'])) $titleParts[] = $variation['mood'];
            if (isset($variation['energy'])) $titleParts[] = $variation['energy'];
            
            if (!empty($titleParts)) {
                $variationTitle = implode(' ', $titleParts) . ' Variation';
            } else {
                $variationTitle = "AI Variation " . ($variationIndex + 1);
            }
        }
        
        // Build metadata - remove null values to avoid JSON issues
        $variationMetadata = [];
        if (isset($variation['genre']) && $variation['genre'] !== null) {
            $variationMetadata['genre'] = $variation['genre'];
        } elseif (isset($variation['tags'][0]) && $variation['tags'][0] !== null) {
            $variationMetadata['genre'] = $variation['tags'][0];
        }
        if (isset($variation['style']) && $variation['style'] !== null) {
            $variationMetadata['style'] = $variation['style'];
        }
        if (isset($variation['bpm']) && $variation['bpm'] !== null) {
            $variationMetadata['bpm'] = $variation['bpm'];
        } elseif (isset($variation['tempo']) && $variation['tempo'] !== null) {
            $variationMetadata['bpm'] = $variation['tempo'];
        }
        if (isset($variation['key']) && $variation['key'] !== null) {
            $variationMetadata['key'] = $variation['key'];
        }
        if (isset($variation['mood']) && $variation['mood'] !== null) {
            $variationMetadata['mood'] = $variation['mood'];
        }
        if (isset($variation['energy']) && $variation['energy'] !== null) {
            $variationMetadata['energy'] = $variation['energy'];
        }
        if (isset($variation['tags']) && $variation['tags'] !== null) {
            $variationMetadata['tags'] = $variation['tags'];
        }
        if (isset($variation['duration']) && $variation['duration'] !== null) {
            $variationMetadata['duration'] = $variation['duration'];
        }
        $variationMetadata['title'] = $variationTitle;
        
        // Validate JSON before encoding
        $metadataJson = json_encode($variationMetadata, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        if ($metadataJson === false) {
            echo "<p style='color: orange;'>⚠️ Failed to encode metadata JSON, using empty object</p>";
            $metadataJson = '{}';
        }
        
        // Validate JSON is valid
        $testDecode = json_decode($metadataJson, true);
        if ($testDecode === null && json_last_error() !== JSON_ERROR_NONE) {
            echo "<p style='color: orange;'>⚠️ Invalid JSON generated, using empty object. Error: " . json_last_error_msg() . "</p>";
            $metadataJson = '{}';
        }
        
        // 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,
            $variationIndex,
            $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,
            $metadataJson
        ]);
        
        if ($result) {
            $storedCount++;
            $variationIndex++;
            echo "<p>✅ Stored variation {$variationIndex} (original index {$originalIndex}): {$variationTitle}</p>";
        } else {
            $errorInfo = $stmt->errorInfo();
            echo "<p style='color: red;'>❌ Failed to store variation {$originalIndex}</p>";
            echo "<p><strong>Error:</strong> " . htmlspecialchars($errorInfo[2] ?? 'Unknown error') . "</p>";
            echo "<p><strong>Error Code:</strong> " . ($errorInfo[0] ?? 'N/A') . "</p>";
            echo "<details><summary>Metadata that failed:</summary><pre>" . htmlspecialchars($metadataJson) . "</pre></details>";
            echo "<details><summary>Full error info:</summary><pre>" . htmlspecialchars(json_encode($errorInfo, JSON_PRETTY_PRINT)) . "</pre></details>";
            
            // Try inserting without metadata to see if that's the issue
            echo "<p>🔄 Trying to insert without metadata field...</p>";
            try {
                $stmt2 = $pdo->prepare("
                    INSERT INTO audio_variations 
                    (track_id, variation_index, audio_url, duration, title, tags, image_url, source_audio_url, stream_audio_url) 
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
                ");
                $result2 = $stmt2->execute([
                    $track_id,
                    $variationIndex,
                    $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
                ]);
                
                if ($result2) {
                    echo "<p style='color: green;'>✅ Successfully stored without metadata field</p>";
                    $storedCount++;
                    $variationIndex++;
                } else {
                    $errorInfo2 = $stmt2->errorInfo();
                    echo "<p style='color: red;'>❌ Still failed without metadata: " . htmlspecialchars($errorInfo2[2] ?? 'Unknown') . "</p>";
                }
            } catch (Exception $e2) {
                echo "<p style='color: red;'>❌ Exception without metadata: " . htmlspecialchars($e2->getMessage()) . "</p>";
            }
        }
    }
    
    // Update variations_count
    $stmt = $pdo->prepare("UPDATE music_tracks SET variations_count = ? WHERE id = ?");
    $stmt->execute([$storedCount, $track_id]);
    
    $pdo->commit();
    
    echo "<hr>";
    echo "<p style='color: green; font-size: 18px;'><strong>✅ SUCCESS!</strong> Restored {$storedCount} variation(s)</p>";
    echo "<p><a href='check_track_variations.php'>Check Again</a> | <a href='/library.php'>View Library</a></p>";
    
} catch (Exception $e) {
    $pdo->rollBack();
    echo "<p style='color: red;'>❌ ERROR: " . htmlspecialchars($e->getMessage()) . "</p>";
    echo "<pre>" . htmlspecialchars($e->getTraceAsString()) . "</pre>";
}


CasperSecurity Mini