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/public_html/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/soundstudiopro.com/public_html/fix_wrong_bpm.php
<?php
/**
 * Fix Wrong BPM in Existing Tracks
 * 
 * This script corrects BPM values in existing tracks by extracting
 * the actual BPM from the API response stored in raw_callback metadata.
 * Only updates tracks where the API actually provided BPM data.
 */

require_once 'config/database.php';

$pdo = getDBConnection();
if (!$pdo) {
    die("Failed to connect to database");
}

// Function to extract BPM from API callback data (same logic as callback.php)
function extractBPMFromCallback($data) {
    $apiBpm = null;
    
    // Check nested data structure (API.box format)
    if (isset($data['data']['data']) && is_array($data['data']['data']) && !empty($data['data']['data'])) {
        $trackData = $data['data']['data'][0]; // First variation
        $apiBpm = $trackData['bpm'] ?? $trackData['tempo'] ?? null;
    }
    
    // Fallback to top-level data
    if (!$apiBpm) {
        $apiBpm = $data['bpm'] ?? $data['tempo'] ?? null;
    }
    
    // Validate BPM is in reasonable range (40-300 BPM)
    if ($apiBpm !== null) {
        $apiBpm = intval($apiBpm);
        if ($apiBpm < 40 || $apiBpm > 300) {
            return null; // Invalid BPM
        }
    }
    
    return $apiBpm;
}

echo "<h1>Fix Wrong BPM in Existing Tracks</h1>\n";
echo "<style>
    body { font-family: Arial, sans-serif; margin: 20px; background: #1a1a1a; color: #fff; }
    .success { color: #4CAF50; }
    .error { color: #f44336; }
    .warning { color: #ff9800; }
    .info { color: #2196F3; }
    table { border-collapse: collapse; width: 100%; margin-top: 20px; }
    th, td { border: 1px solid #444; padding: 8px; text-align: left; }
    th { background: #333; }
    tr:nth-child(even) { background: #222; }
</style>\n";

// Get all tracks with metadata
$stmt = $pdo->query("
    SELECT id, title, metadata, status 
    FROM music_tracks 
    WHERE metadata IS NOT NULL 
    AND JSON_EXTRACT(metadata, '$.bpm') IS NOT NULL
    AND status = 'complete'
    ORDER BY id DESC
");

$tracks = $stmt->fetchAll(PDO::FETCH_ASSOC);
$totalTracks = count($tracks);
$fixedCount = 0;
$skippedCount = 0;
$errorCount = 0;

echo "<p class='info'>Found $totalTracks tracks with BPM in metadata</p>\n";
echo "<table>\n";
echo "<tr><th>Track ID</th><th>Title</th><th>Old BPM</th><th>API BPM</th><th>Status</th></tr>\n";

foreach ($tracks as $track) {
    $trackId = $track['id'];
    $title = htmlspecialchars($track['title']);
    $metadata = json_decode($track['metadata'], true);
    
    if (!$metadata) {
        echo "<tr><td>$trackId</td><td>$title</td><td colspan='3' class='error'>Invalid metadata JSON</td></tr>\n";
        $errorCount++;
        continue;
    }
    
    $oldBpm = $metadata['bpm'] ?? null;
    
    // Check if we have raw_callback with API data
    $rawCallback = $metadata['raw_callback'] ?? null;
    
    if (!$rawCallback) {
        echo "<tr><td>$trackId</td><td>$title</td><td>$oldBpm</td><td colspan='2' class='warning'>No raw_callback data - cannot verify</td></tr>\n";
        $skippedCount++;
        continue;
    }
    
    // Extract actual BPM from API response
    $apiBpm = extractBPMFromCallback($rawCallback);
    
    if ($apiBpm === null) {
        // API didn't provide BPM - remove it from metadata
        unset($metadata['bpm']);
        $updateStmt = $pdo->prepare("UPDATE music_tracks SET metadata = ? WHERE id = ?");
        $updateStmt->execute([json_encode($metadata), $trackId]);
        echo "<tr><td>$trackId</td><td>$title</td><td>$oldBpm</td><td>NULL (API didn't provide)</td><td class='warning'>Removed (API has no BPM)</td></tr>\n";
        $fixedCount++;
        continue;
    }
    
    // Check if BPM needs correction
    if ($oldBpm != $apiBpm) {
        // Update metadata with correct BPM
        $metadata['bpm'] = $apiBpm;
        $updateStmt = $pdo->prepare("UPDATE music_tracks SET metadata = ? WHERE id = ?");
        $updateStmt->execute([json_encode($metadata), $trackId]);
        echo "<tr><td>$trackId</td><td>$title</td><td>$oldBpm</td><td>$apiBpm</td><td class='success'>✅ Fixed</td></tr>\n";
        $fixedCount++;
    } else {
        echo "<tr><td>$trackId</td><td>$title</td><td>$oldBpm</td><td>$apiBpm</td><td class='info'>Already correct</td></tr>\n";
        $skippedCount++;
    }
}

echo "</table>\n";
echo "<hr>\n";
echo "<h2>Summary</h2>\n";
echo "<p class='success'>✅ Fixed: $fixedCount tracks</p>\n";
echo "<p class='info'>ℹ️ Skipped (already correct or no API data): $skippedCount tracks</p>\n";
echo "<p class='error'>❌ Errors: $errorCount tracks</p>\n";
echo "<p class='info'>📊 Total processed: $totalTracks tracks</p>\n";


CasperSecurity Mini