Your IP : 216.73.217.78


Current Path : /home/seto/888mirror.pm/admin/
Upload File :
Current File : /home/seto/888mirror.pm/admin/map-data.php

<?php
require_once __DIR__ . '/../includes/auth.php';
auth_check();
header('Content-Type: application/json');

$db = db();

$excl = (($_GET['exclude_cnus'] ?? '1') !== '0');
$excl_sql = $excl ? "AND country NOT IN ('cn','us')" : '';

// Агрегат по странам (всё время)
$stats_raw = $db->query("
    SELECT country,
        COUNT(DISTINCT CASE WHEN event_type='impression' THEN visit_id END) as imp,
        SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clk
    FROM stats
    WHERE country != '-' AND country != '' AND length(country) = 2 $excl_sql
    GROUP BY country
")->fetchAll();
$stats = [];
foreach ($stats_raw as $r) {
    $stats[strtolower($r['country'])] = ['imp' => (int)$r['imp'], 'clk' => (int)$r['clk']];
}

// Последние события за 30 минут (для пульсации)
$recent_raw = $db->query("
    SELECT country, event_type, created_at
    FROM stats
    WHERE country != '-' AND country != '' AND length(country) = 2
      AND created_at >= datetime('now', '-30 minutes') $excl_sql
    ORDER BY created_at DESC
    LIMIT 100
")->fetchAll();
$recent = [];
foreach ($recent_raw as $r) {
    $recent[] = [
        'cc'   => strtolower($r['country']),
        'type' => $r['event_type'],
        'ts'   => strtotime($r['created_at']),
    ];
}

// Drill-down: топ брендов + статистика по дням для страны
$cc = isset($_GET['cc']) ? strtolower(preg_replace('/[^a-z]/', '', $_GET['cc'])) : null;
$drill = null;
if ($cc && strlen($cc) === 2) {
    $brands_raw = $db->prepare("
        SELECT b.name, b.logo,
            COUNT(DISTINCT CASE WHEN s.event_type='impression' THEN s.visit_id END) as imp,
            SUM(CASE WHEN s.event_type='click' THEN 1 ELSE 0 END) as clk
        FROM stats s
        JOIN brands b ON b.id = s.brand_id
        WHERE s.country = ? AND s.country != '-'
        GROUP BY s.brand_id
        HAVING imp > 0 OR clk > 0
        ORDER BY clk DESC
        LIMIT 8
    ");
    $brands_raw->execute([$cc]);
    $brands = $brands_raw->fetchAll();

    $days_raw = $db->prepare("
        SELECT DATE(created_at) as day,
            COUNT(DISTINCT CASE WHEN event_type='impression' THEN visit_id END) as imp,
            SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clk
        FROM stats
        WHERE country = ? AND created_at >= date('now', '-14 days')
        GROUP BY DATE(created_at)
        ORDER BY day
    ");
    $days_raw->execute([$cc]);
    $days = $days_raw->fetchAll();

    $drill = ['brands' => $brands, 'days' => $days];
}

echo json_encode(['stats' => $stats, 'recent' => $recent, 'drill' => $drill, 'ts' => time()]);