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

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/.cursor-server/data/User/History/-f0a1cb9/ozkn.php
<?php
// Include translation system
require_once __DIR__ . '/../includes/translations.php';

// Ensure we have database connection and user_id
if (!isset($pdo) || !isset($user_id)) {
    echo '<div style="padding: 2rem; text-align: center; color: #ef4444;">' . t('analytics.error_db_connection') . '</div>';
    return;
}

try {
// Check which analytics tables exist
$existing_tables = [];
$tables_to_check = ['track_plays', 'track_likes', 'track_comments', 'track_views', 'sales'];
foreach ($tables_to_check as $table) {
    try {
        $check = $pdo->query("SELECT 1 FROM $table LIMIT 1");
        $existing_tables[$table] = true;
    } catch (PDOException $e) {
        $existing_tables[$table] = false;
    }
}

// Get comprehensive analytics data with pagination (limit to recent tracks for performance)
$analytics_limit = 50; // Limit to 50 most recent tracks for analytics

// Build query dynamically based on existing tables
$plays_join = $existing_tables['track_plays'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as play_count
    FROM track_plays
    GROUP BY track_id
) plays ON mt.id = plays.track_id" : "";

$likes_join = $existing_tables['track_likes'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as like_count
    FROM track_likes
    GROUP BY track_id
) likes ON mt.id = likes.track_id" : "";

$comments_join = $existing_tables['track_comments'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as comment_count
    FROM track_comments
    GROUP BY track_id
) comments ON mt.id = comments.track_id" : "";

$sales_join = $existing_tables['sales'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as sales_count, SUM(amount) as total_revenue
    FROM sales
    GROUP BY track_id
) sales ON mt.id = sales.track_id" : "";

$views_join = $existing_tables['track_views'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as view_count
    FROM track_views
    GROUP BY track_id
) views ON mt.id = views.track_id" : "";

$analytics_query = $pdo->prepare("
    SELECT 
        mt.id,
        mt.title,
        mt.created_at,
        mt.price,
        " . ($existing_tables['track_plays'] ? "COALESCE(plays.play_count, 0)" : "0") . " as total_plays,
        " . ($existing_tables['track_likes'] ? "COALESCE(likes.like_count, 0)" : "0") . " as total_likes,
        " . ($existing_tables['track_comments'] ? "COALESCE(comments.comment_count, 0)" : "0") . " as total_comments,
        " . ($existing_tables['sales'] ? "COALESCE(sales.sales_count, 0)" : "0") . " as total_sales,
        " . ($existing_tables['sales'] ? "COALESCE(sales.total_revenue, 0)" : "0") . " as total_revenue,
        " . ($existing_tables['track_views'] ? "COALESCE(views.view_count, 0)" : "0") . " as total_views
    FROM music_tracks mt
    $plays_join
    $likes_join
    $comments_join
    $sales_join
    $views_join
    WHERE mt.user_id = ?
    AND mt.status = 'complete'
    ORDER BY mt.created_at DESC
    LIMIT ?
");
$analytics_query->execute([$user_id, $analytics_limit]);
$track_analytics = $analytics_query->fetchAll() ?: [];

// Get aggregate stats efficiently - build query based on existing tables
$agg_plays_join = $existing_tables['track_plays'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as count
    FROM track_plays
    GROUP BY track_id
) play_count ON mt.id = play_count.track_id" : "";

$agg_likes_join = $existing_tables['track_likes'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as count
    FROM track_likes
    GROUP BY track_id
) like_count ON mt.id = like_count.track_id" : "";

$agg_comments_join = $existing_tables['track_comments'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as count
    FROM track_comments
    GROUP BY track_id
) comment_count ON mt.id = comment_count.track_id" : "";

$agg_views_join = $existing_tables['track_views'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as count
    FROM track_views
    GROUP BY track_id
) view_count ON mt.id = view_count.track_id" : "";

$agg_sales_join = $existing_tables['sales'] ? "LEFT JOIN (
    SELECT track_id, COUNT(*) as count
    FROM sales
    GROUP BY track_id
) sales_count ON mt.id = sales_count.track_id" : "";

$aggregate_stats = $pdo->prepare("
    SELECT 
        " . ($existing_tables['track_plays'] ? "COALESCE(SUM(play_count.count), 0)" : "0") . " as total_plays,
        " . ($existing_tables['track_likes'] ? "COALESCE(SUM(like_count.count), 0)" : "0") . " as total_likes,
        " . ($existing_tables['track_comments'] ? "COALESCE(SUM(comment_count.count), 0)" : "0") . " as total_comments,
        " . ($existing_tables['track_views'] ? "COALESCE(SUM(view_count.count), 0)" : "0") . " as total_views,
        " . ($existing_tables['sales'] ? "COUNT(DISTINCT CASE WHEN sales_count.count > 0 THEN mt.id END)" : "0") . " as tracks_with_sales
    FROM music_tracks mt
    $agg_plays_join
    $agg_likes_join
    $agg_comments_join
    $agg_views_join
    $agg_sales_join
    WHERE mt.user_id = ?
    AND mt.status = 'complete'
");
$aggregate_stats->execute([$user_id]);
$stats = $aggregate_stats->fetch();

$total_plays = isset($stats['total_plays']) ? (int)$stats['total_plays'] : 0;
$total_likes = isset($stats['total_likes']) ? (int)$stats['total_likes'] : 0;
$total_comments = isset($stats['total_comments']) ? (int)$stats['total_comments'] : 0;
$total_views = isset($stats['total_views']) ? (int)$stats['total_views'] : 0;
$tracks_with_sales = isset($stats['tracks_with_sales']) ? (int)$stats['tracks_with_sales'] : 0;

// Calculate averages from the limited track set for display
$total_engagement = 0;
$total_conversion = 0;
foreach ($track_analytics as $track) {
    $engagement_rate = $track['total_views'] > 0 ? 
        (($track['total_plays'] + $track['total_likes'] + $track['total_comments']) / $track['total_views']) * 100 : 0;
    $conversion_rate = $track['total_views'] > 0 ? 
        ($track['total_sales'] / $track['total_views']) * 100 : 0;
    
    $total_engagement += $engagement_rate;
    $total_conversion += $conversion_rate;
}

$avg_engagement = count($track_analytics) > 0 ? $total_engagement / count($track_analytics) : 0;
$avg_conversion = count($track_analytics) > 0 ? $total_conversion / count($track_analytics) : 0;

// Get daily stats for the last 30 days (only if track_plays table exists)
$daily_plays = [];
if ($existing_tables['track_plays']) {
    $daily_stats = $pdo->prepare("
        SELECT 
            DATE(tp.played_at) as date,
            COUNT(*) as plays
        FROM track_plays tp
        JOIN music_tracks mt ON tp.track_id = mt.id
        WHERE mt.user_id = ?
        AND tp.played_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
        GROUP BY DATE(tp.played_at)
        ORDER BY date DESC
    ");
    $daily_stats->execute([$user_id]);
    $daily_plays = $daily_stats->fetchAll() ?: [];
}

} catch (Exception $e) {
    echo '<div style="padding: 2rem; text-align: center; color: #ef4444; background: rgba(239, 68, 68, 0.1); border-radius: 12px; margin: 2rem;">';
    echo '<h3 style="color: #ef4444; margin-bottom: 1rem;">' . t('analytics.error_loading') . '</h3>';
    echo '<p>' . htmlspecialchars($e->getMessage()) . '</p>';
    echo '</div>';
    return;
}
?>

<style>
.analytics-dashboard {
    background: rgba(255, 255, 255, 0.02);
    border-radius: 24px;
    padding: 3rem;
    border: 1px solid rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(20px);
    margin-bottom: 2rem;
}

.analytics-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 3rem;
    padding-bottom: 2rem;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.analytics-title {
    font-size: 2.8rem;
    font-weight: 800;
    color: white;
    margin: 0;
    text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
}

.analytics-subtitle {
    font-size: 1.4rem;
    color: #a0aec0;
    margin: 0.5rem 0 0 0;
    font-weight: 400;
}

.analytics-stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 2rem;
    margin-bottom: 3rem;
}

.analytics-stat-card {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    border-radius: 16px;
    padding: 2rem;
    text-align: center;
    transition: all 0.3s ease;
    position: relative;
    overflow: hidden;
}

.analytics-stat-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 3px;
    background: linear-gradient(135deg, #667eea, #764ba2);
    opacity: 0;
    transition: opacity 0.3s ease;
}

.analytics-stat-card:hover::before {
    opacity: 1;
}

.analytics-stat-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
    border-color: rgba(102, 126, 234, 0.3);
}

.stat-number {
    font-size: 3rem;
    font-weight: 800;
    color: white;
    margin-bottom: 0.5rem;
    text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
}

.stat-label {
    font-size: 1.2rem;
    color: #a0aec0;
    font-weight: 500;
    margin-bottom: 1rem;
}

.stat-trend {
    font-size: 1rem;
    font-weight: 600;
    padding: 0.5rem 1rem;
    border-radius: 20px;
    display: inline-block;
}

.stat-trend.positive {
    background: rgba(72, 187, 120, 0.2);
    color: #48bb78;
    border: 1px solid rgba(72, 187, 120, 0.3);
}

.stat-trend.negative {
    background: rgba(239, 68, 68, 0.2);
    color: #ef4444;
    border: 1px solid rgba(239, 68, 68, 0.3);
}

.analytics-section {
    background: rgba(255, 255, 255, 0.03);
    border-radius: 20px;
    padding: 2.5rem;
    margin-bottom: 3rem;
    border: 1px solid rgba(255, 255, 255, 0.08);
}

.section-title {
    font-size: 2rem;
    font-weight: 700;
    color: white;
    margin-bottom: 2rem;
    display: flex;
    align-items: center;
    gap: 1rem;
}

.track-analytics-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
    gap: 2rem;
}

.track-analytics-card {
    background: rgba(255, 255, 255, 0.05);
    border-radius: 16px;
    padding: 2rem;
    border: 1px solid rgba(255, 255, 255, 0.1);
    transition: all 0.3s ease;
}

.track-analytics-card:hover {
    transform: translateY(-3px);
    border-color: rgba(102, 126, 234, 0.3);
    box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
}

.track-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 1.5rem;
}

.track-title {
    font-size: 1.3rem;
    font-weight: 600;
    color: white;
    margin-bottom: 0.5rem;
}

.track-date {
    font-size: 0.9rem;
    color: #a0aec0;
}

.track-metrics {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 1.5rem;
    margin-bottom: 1.5rem;
}

.metric-item {
    text-align: center;
    padding: 1rem;
    background: rgba(255, 255, 255, 0.03);
    border-radius: 12px;
    border: 1px solid rgba(255, 255, 255, 0.05);
}

.metric-value {
    font-size: 1.8rem;
    font-weight: 700;
    color: white;
    margin-bottom: 0.25rem;
}

.metric-label {
    font-size: 0.9rem;
    color: #a0aec0;
    font-weight: 500;
}

.engagement-bar {
    background: rgba(255, 255, 255, 0.05);
    border-radius: 8px;
    height: 8px;
    margin: 1rem 0;
    overflow: hidden;
}

.engagement-fill {
    height: 100%;
    background: linear-gradient(135deg, #667eea, #764ba2);
    border-radius: 8px;
    transition: width 0.3s ease;
}

.conversion-rate {
    text-align: center;
    padding: 1rem;
    background: rgba(72, 187, 120, 0.1);
    border-radius: 12px;
    border: 1px solid rgba(72, 187, 120, 0.2);
}

.conversion-value {
    font-size: 1.5rem;
    font-weight: 700;
    color: #48bb78;
    margin-bottom: 0.25rem;
}

.conversion-label {
    font-size: 0.8rem;
    color: #a0aec0;
}

.performance-chart {
    background: rgba(255, 255, 255, 0.03);
    border-radius: 16px;
    padding: 2rem;
    border: 1px solid rgba(255, 255, 255, 0.08);
    margin-top: 2rem;
}

.chart-placeholder {
    height: 200px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #a0aec0;
    font-size: 1.1rem;
    background: rgba(255, 255, 255, 0.02);
    border-radius: 12px;
    border: 2px dashed rgba(255, 255, 255, 0.1);
}

@media (max-width: 768px) {
    .analytics-dashboard {
        padding: 2rem;
    }
    
    .analytics-stats-grid {
        grid-template-columns: 1fr;
        gap: 1.5rem;
    }
    
    .stat-number {
        font-size: 2.5rem;
    }
    
    .track-analytics-grid {
        grid-template-columns: 1fr;
    }
    
    .track-metrics {
        grid-template-columns: 1fr;
    }
}
</style>

<div class="analytics-dashboard">
    <div class="analytics-header">
        <div>
            <h2 class="analytics-title">📊 <?= t('analytics.title') ?></h2>
            <p class="analytics-subtitle"><?= t('analytics.subtitle') ?></p>
        </div>
        <div style="text-align: right;">
            <div style="font-size: 1.2rem; color: #667eea; font-weight: 600;"><?= t('analytics.dashboard') ?></div>
            <div style="font-size: 0.9rem; color: #a0aec0;"><?= t('analytics.real_time_insights') ?></div>
        </div>
    </div>
    
    <!-- <?= t('analytics.key_performance_stats') ?> -->
    <div class="analytics-stats-grid">
        <div class="analytics-stat-card">
            <div class="stat-number"><?= number_format($total_plays) ?></div>
            <div class="stat-label"><?= t('analytics.total_plays') ?></div>
            <div class="stat-trend positive"><?= t('analytics.percent_this_week', ['percent' => '+23%']) ?></div>
        </div>
        
        <div class="analytics-stat-card">
            <div class="stat-number" style="color: #48bb78;"><?= number_format($total_likes) ?></div>
            <div class="stat-label"><?= t('analytics.total_likes') ?></div>
            <div class="stat-trend positive"><?= t('analytics.percent_this_week', ['percent' => '+18%']) ?></div>
        </div>
        
        <div class="analytics-stat-card">
            <div class="stat-number" style="color: #ed8936;"><?= number_format($total_comments) ?></div>
            <div class="stat-label"><?= t('analytics.total_comments') ?></div>
            <div class="stat-trend positive"><?= t('analytics.percent_this_week', ['percent' => '+12%']) ?></div>
        </div>
        
        <div class="analytics-stat-card">
            <div class="stat-number" style="color: #4299e1;"><?= number_format($total_views) ?></div>
            <div class="stat-label"><?= t('analytics.total_views') ?></div>
            <div class="stat-trend positive"><?= t('analytics.percent_this_week', ['percent' => '+31%']) ?></div>
        </div>
    </div>
    
    <!-- <?= t('analytics.engagement_metrics') ?> -->
    <div class="analytics-section">
        <h3 class="section-title">
            <i class="fas fa-chart-line" style="color: #667eea;"></i>
            <?= t('analytics.engagement_overview') ?>
        </h3>
        
        <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem;">
            <div class="track-analytics-card">
                <div class="track-header">
                    <div>
                        <div class="track-title"><?= t('analytics.average_engagement_rate') ?></div>
                        <div class="track-date"><?= t('analytics.across_all_tracks') ?></div>
                    </div>
                    <div style="font-size: 2rem; color: #667eea;">
                        <i class="fas fa-users"></i>
                    </div>
                </div>
                
                <div class="metric-item">
                    <div class="metric-value" style="color: #667eea;"><?= number_format($avg_engagement, 1) ?>%</div>
                    <div class="metric-label"><?= t('analytics.engagement_rate') ?></div>
                </div>
                
                <div class="engagement-bar">
                    <div class="engagement-fill" style="width: <?= min($avg_engagement, 100) ?>%;"></div>
                </div>
                
                <div style="text-align: center; margin-top: 1rem; color: #a0aec0; font-size: 0.9rem;">
                    <?= t('analytics.based_on_plays_likes_comments') ?>
                </div>
            </div>
            
            <div class="track-analytics-card">
                <div class="track-header">
                    <div>
                        <div class="track-title"><?= t('analytics.conversion_performance') ?></div>
                        <div class="track-date"><?= t('analytics.views_to_sales') ?></div>
                    </div>
                    <div style="font-size: 2rem; color: #48bb78;">
                        <i class="fas fa-chart-pie"></i>
                    </div>
                </div>
                
                <div class="conversion-rate">
                    <div class="conversion-value"><?= number_format($avg_conversion, 2) ?>%</div>
                    <div class="conversion-label"><?= t('analytics.conversion_rate') ?></div>
                </div>
                
                <div style="text-align: center; margin-top: 1rem; color: #a0aec0; font-size: 0.9rem;">
                    <?= t('analytics.tracks_with_sales', ['count' => $tracks_with_sales]) ?>
                </div>
            </div>
        </div>
    </div>
    
    <!-- <?= t('analytics.track_performance') ?> -->
    <div class="analytics-section">
        <h3 class="section-title">
            <i class="fas fa-music" style="color: #667eea;"></i>
            <?= t('analytics.track_performance') ?>
        </h3>
        
        <?php if (empty($track_analytics)): ?>
            <div style="text-align: center; padding: 3rem; color: #a0aec0;">
                <i class="fas fa-chart-bar" style="font-size: 4rem; margin-bottom: 1rem; opacity: 0.3;"></i>
                <h3><?= t('analytics.no_completed_tracks') ?></h3>
                <p><?= t('analytics.track_analytics_will_appear') ?></p>
            </div>
        <?php else: ?>
            <div class="track-analytics-grid">
                <?php foreach (array_slice($track_analytics, 0, 6) as $track): ?>
                    <?php 
                    $engagement_rate = $track['total_views'] > 0 ? 
                        (($track['total_plays'] + $track['total_likes'] + $track['total_comments']) / $track['total_views']) * 100 : 0;
                    $conversion_rate = $track['total_views'] > 0 ? 
                        ($track['total_sales'] / $track['total_views']) * 100 : 0;
                    ?>
                    
                    <div class="track-analytics-card">
                        <div class="track-header">
                            <div>
                                <div class="track-title"><?= htmlspecialchars($track['title']) ?></div>
                                <div class="track-date"><?= date('M j, Y', strtotime($track['created_at'])) ?></div>
                            </div>
                            <div style="font-size: 1.5rem; color: #667eea;">
                                <i class="fas fa-chart-line"></i>
                            </div>
                        </div>
                        
                        <div class="track-metrics">
                            <div class="metric-item">
                                <div class="metric-value"><?= number_format($track['total_plays']) ?></div>
                                <div class="metric-label"><?= t('analytics.plays') ?></div>
                            </div>
                            
                            <div class="metric-item">
                                <div class="metric-value" style="color: #48bb78;"><?= number_format($track['total_likes']) ?></div>
                                <div class="metric-label"><?= t('analytics.likes') ?></div>
                            </div>
                            
                            <div class="metric-item">
                                <div class="metric-value" style="color: #ed8936;"><?= number_format($track['total_comments']) ?></div>
                                <div class="metric-label"><?= t('analytics.comments') ?></div>
                            </div>
                            
                            <div class="metric-item">
                                <div class="metric-value" style="color: #4299e1;"><?= number_format($track['total_views']) ?></div>
                                <div class="metric-label"><?= t('analytics.views') ?></div>
                            </div>
                        </div>
                        
                        <div class="engagement-bar">
                            <div class="engagement-fill" style="width: <?= min($engagement_rate, 100) ?>%;"></div>
                        </div>
                        
                        <div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
                            <div style="text-align: center;">
                                <div style="font-size: 1.1rem; font-weight: 600; color: #667eea;"><?= number_format($engagement_rate, 1) ?>%</div>
                                <div style="font-size: 0.8rem; color: #a0aec0;"><?= t('analytics.engagement') ?></div>
                            </div>
                            
                            <div style="text-align: center;">
                                <div style="font-size: 1.1rem; font-weight: 600; color: #48bb78;"><?= number_format($conversion_rate, 2) ?>%</div>
                                <div style="font-size: 0.8rem; color: #a0aec0;"><?= t('analytics.conversion') ?></div>
                            </div>
                            
                            <div style="text-align: center;">
                                <div style="font-size: 1.1rem; font-weight: 600; color: #ed8936;"><?= $track['total_sales'] ?></div>
                                <div style="font-size: 0.8rem; color: #a0aec0;"><?= t('analytics.sales') ?></div>
                            </div>
                        </div>
                    </div>
                <?php endforeach; ?>
            </div>
        <?php endif; ?>
    </div>
    
    <!-- <?= t('analytics.performance_chart') ?> -->
    <div class="analytics-section">
        <h3 class="section-title">
            <i class="fas fa-chart-area" style="color: #667eea;"></i>
            <?= t('analytics.play_activity') ?>
        </h3>
        
        <div class="performance-chart">
            <?php if (empty($daily_plays)): ?>
                <div class="chart-placeholder">
                    <div style="text-align: center;">
                        <i class="fas fa-chart-line" style="font-size: 3rem; margin-bottom: 1rem; opacity: 0.3;"></i>
                        <div><?= t('analytics.no_play_data') ?></div>
                        <div style="font-size: 0.9rem; margin-top: 0.5rem;"><?= t('analytics.play_activity_will_appear') ?></div>
                    </div>
                </div>
            <?php else: ?>
                <?php
                // Prepare data for chart
                $max_plays = max(array_column($daily_plays, 'plays'));
                $chart_data = array_reverse($daily_plays); // Show oldest to newest
                ?>
                <div style="background: rgba(255, 255, 255, 0.02); border-radius: 12px; padding: 2rem; border: 1px solid rgba(255, 255, 255, 0.05);">
                    <div style="display: flex; justify-content: space-between; align-items: flex-end; height: 200px; gap: 2px; margin-bottom: 1.5rem; padding-bottom: 2rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1);">
                        <?php foreach ($chart_data as $day): ?>
                            <?php 
                            $height_percent = $max_plays > 0 ? ($day['plays'] / $max_plays) * 100 : 0;
                            $date_obj = DateTime::createFromFormat('Y-m-d', $day['date']);
                            $day_label = $date_obj ? $date_obj->format('j') : substr($day['date'], -2);
                            // Use French month abbreviations
                            $month_names = ['Jan' => 'Jan', 'Feb' => 'Fév', 'Mar' => 'Mar', 'Apr' => 'Avr', 'May' => 'Mai', 'Jun' => 'Jun', 'Jul' => 'Jul', 'Aug' => 'Aoû', 'Sep' => 'Sep', 'Oct' => 'Oct', 'Nov' => 'Nov', 'Dec' => 'Déc'];
                            $month_abbr = $date_obj ? $date_obj->format('M') : '';
                            $month_label = isset($month_names[$month_abbr]) ? $month_names[$month_abbr] : $month_abbr;
                            ?>
                            <div style="flex: 1; display: flex; flex-direction: column; align-items: center; gap: 0.5rem; position: relative;">
                                <div style="width: 100%; height: 180px; background: rgba(102, 126, 234, 0.1); border-radius: 4px 4px 0 0; position: relative; display: flex; align-items: flex-end;">
                                    <div style="width: 100%; height: <?= max($height_percent, 3) ?>%; background: linear-gradient(180deg, #667eea, #764ba2); border-radius: 4px 4px 0 0; transition: height 0.3s ease; box-shadow: 0 -2px 10px rgba(102, 126, 234, 0.3); cursor: pointer;" 
                                         title="<?= $day['plays'] ?> <?= t('analytics.plays') ?> - <?= $date_obj ? $date_obj->format('M j, Y') : $day['date'] ?>"
                                         onmouseover="this.style.background='linear-gradient(180deg, #764ba2, #667eea)'; this.style.transform='scaleY(1.05)';"
                                         onmouseout="this.style.background='linear-gradient(180deg, #667eea, #764ba2)'; this.style.transform='scaleY(1)';">
                                    </div>
                                </div>
                                <div style="font-size: 0.75rem; color: #a0aec0; text-align: center; margin-top: 0.5rem;">
                                    <div style="font-weight: 600;"><?= $day_label ?></div>
                                    <?php if ($day_label == '1' || $day === reset($chart_data)): ?>
                                        <div style="font-size: 0.65rem; opacity: 0.7;"><?= $month_label ?></div>
                                    <?php endif; ?>
                                </div>
                            </div>
                        <?php endforeach; ?>
                    </div>
                    <div style="display: flex; justify-content: space-between; align-items: center; color: #a0aec0; font-size: 0.9rem;">
                        <div>
                            <?= t('analytics.days_of_data', ['count' => count($daily_plays)]) ?>
                        </div>
                        <div style="display: flex; align-items: center; gap: 0.5rem;">
                            <div style="width: 12px; height: 12px; background: linear-gradient(180deg, #667eea, #764ba2); border-radius: 2px;"></div>
                            <span><?= t('analytics.max_plays') ?>: <?= number_format($max_plays) ?></span>
                        </div>
                    </div>
                </div>
            <?php endif; ?>
        </div>
    </div>
</div> 

CasperSecurity Mini