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/.cursor-server/data/User/History/d8b65c3/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/.cursor-server/data/User/History/d8b65c3/tmyW.php
<?php
session_start();
header('Content-Type: application/json');

// Check if user is logged in and is admin
if (!isset($_SESSION['user_id']) || !isset($_SESSION['is_admin']) || !$_SESSION['is_admin']) {
    http_response_code(401);
    echo json_encode(['error' => 'Unauthorized']);
    exit;
}

require_once 'config/database.php';

$pdo = getDBConnection();

if (!$pdo) {
    http_response_code(500);
    echo json_encode(['error' => 'Database connection failed']);
    exit;
}

try {
    $action = $_GET['action'] ?? 'stats';
    
    switch ($action) {
        case 'stats':
            // Get comprehensive statistics
            $stats = [];
            
            // User stats
            $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM users");
            $stmt->execute();
            $stats['totalUsers'] = $stmt->fetch()['total'];
            
            $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM users WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)");
            $stmt->execute();
            $stats['newUsers'] = $stmt->fetch()['total'];
            
            $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM users WHERE plan IN ('starter', 'pro')");
            $stmt->execute();
            $stats['premiumUsers'] = $stmt->fetch()['total'];
            
            // Track stats
            $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM music_tracks");
            $stmt->execute();
            $stats['totalTracks'] = $stmt->fetch()['total'];
            
            $stmt = $pdo->prepare("
                SELECT 
                    COUNT(CASE WHEN status = 'complete' THEN 1 END) as completed,
                    COUNT(CASE WHEN status = 'processing' THEN 1 END) as processing,
                    COUNT(CASE WHEN status = 'failed' THEN 1 END) as failed
                FROM music_tracks
            ");
            $stmt->execute();
            $trackStats = $stmt->fetch();
            $stats['trackStats'] = $trackStats;
            
            $stmt = $pdo->prepare("
                SELECT COUNT(*) as total 
                FROM music_tracks 
                WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
            ");
            $stmt->execute();
            $stats['newTracks'] = $stmt->fetch()['total'];
            
            // Duration stats
            $stmt = $pdo->prepare("
                SELECT 
                    AVG(duration) as avg_duration,
                    MIN(duration) as min_duration,
                    MAX(duration) as max_duration,
                    COUNT(CASE WHEN duration < 60 THEN 1 END) as short_tracks,
                    COUNT(CASE WHEN duration >= 60 AND duration < 180 THEN 1 END) as medium_tracks,
                    COUNT(CASE WHEN duration >= 180 THEN 1 END) as long_tracks
                FROM music_tracks 
                WHERE status = 'complete' AND duration > 0
            ");
            $stmt->execute();
            $stats['durationStats'] = $stmt->fetch();
            
            echo json_encode(['success' => true, 'data' => $stats]);
            break;
            
        case 'recent_activity':
            // Get recent activity
            $stmt = $pdo->prepare("
                SELECT 
                    mt.id,
                    mt.title,
                    mt.status,
                    mt.duration,
                    mt.created_at,
                    u.name as user_name,
                    u.plan
                FROM music_tracks mt
                JOIN users u ON mt.user_id = u.id
                ORDER BY mt.created_at DESC
                LIMIT 20
            ");
            $stmt->execute();
            $recentActivity = $stmt->fetchAll();
            
            echo json_encode(['success' => true, 'data' => $recentActivity]);
            break;
            
        case 'top_users':
            // Get top users
            $stmt = $pdo->prepare("
                SELECT 
                    u.id,
                    u.name,
                    u.plan,
                    COUNT(mt.id) as total_tracks,
                    COUNT(CASE WHEN mt.status = 'complete' THEN 1 END) as completed_tracks,
                    COUNT(CASE WHEN mt.status = 'processing' THEN 1 END) as processing_tracks,
                    COUNT(CASE WHEN mt.status = 'failed' THEN 1 END) as failed_tracks,
                    MAX(mt.created_at) as last_activity
                FROM users u
                LEFT JOIN music_tracks mt ON u.id = mt.user_id
                GROUP BY u.id, u.name, u.plan
                ORDER BY total_tracks DESC
                LIMIT 15
            ");
            $stmt->execute();
            $topUsers = $stmt->fetchAll();
            
            echo json_encode(['success' => true, 'data' => $topUsers]);
            break;
            
        case 'user_stats':
            // Get user track statistics
            $stmt = $pdo->prepare("
                SELECT 
                    u.name,
                    u.plan,
                    COUNT(CASE WHEN mt.status = 'complete' THEN 1 END) as completed,
                    COUNT(CASE WHEN mt.status = 'processing' THEN 1 END) as processing,
                    COUNT(CASE WHEN mt.status = 'failed' THEN 1 END) as failed
                FROM users u
                LEFT JOIN music_tracks mt ON u.id = mt.user_id
                GROUP BY u.id, u.name, u.plan
                HAVING completed > 0 OR processing > 0 OR failed > 0
                ORDER BY (completed + processing + failed) DESC
            ");
            $stmt->execute();
            $userStats = $stmt->fetchAll();
            
            echo json_encode(['success' => true, 'data' => $userStats]);
            break;
            
        case 'plan_stats':
            // Get plan statistics
            $stmt = $pdo->prepare("
                SELECT 
                    u.plan,
                    COUNT(u.id) as user_count,
                    COUNT(mt.id) as total_tracks,
                    COUNT(CASE WHEN mt.status = 'complete' THEN 1 END) as completed_tracks,
                    AVG(mt.duration) as avg_duration
                FROM users u
                LEFT JOIN music_tracks mt ON u.id = mt.user_id
                GROUP BY u.plan
                ORDER BY user_count DESC
            ");
            $stmt->execute();
            $planStats = $stmt->fetchAll();
            
            echo json_encode(['success' => true, 'data' => $planStats]);
            break;
            
        case 'retry_failed':
            // Bulk retry failed tracks
            $stmt = $pdo->prepare("
                SELECT id, user_id, title 
                FROM music_tracks 
                WHERE status = 'failed' 
                ORDER BY created_at DESC
            ");
            $stmt->execute();
            $failedTracks = $stmt->fetchAll();
            
            $retried = 0;
            foreach ($failedTracks as $track) {
                // Update status to processing
                $updateStmt = $pdo->prepare("
                    UPDATE music_tracks 
                    SET status = 'processing', updated_at = NOW() 
                    WHERE id = ?
                ");
                $updateStmt->execute([$track['id']]);
                $retried++;
            }
            
            echo json_encode([
                'success' => true, 
                'message' => "Retried $retried failed tracks",
                'retried' => $retried
            ]);
            break;
            
        default:
            http_response_code(400);
            echo json_encode(['error' => 'Invalid action']);
    }
    
} catch (Exception $e) {
    error_log("Admin API Error: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(['error' => 'Internal server error']);
}
?> 

CasperSecurity Mini