| Current Path : /home/seto/888mirror.pm/admin/ |
| Current File : /home/seto/888mirror.pm/admin/conversions.php |
<?php
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/helpers.php';
auth_check();
if (!auth_can('conversions')) {
http_response_code(403);
echo '<!DOCTYPE html><html><head><meta charset="UTF-8"><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"></head><body>';
echo admin_nav();
echo '<div class="container mt-5"><div class="alert alert-danger"><strong>Доступ запрещён.</strong> У вашего аккаунта нет доступа к разделу Конверсии.</div></div></body></html>';
exit();
}
$db = db();
$filter_days = (int)($_GET['days'] ?? 30);
$filter_days = in_array($filter_days, [1, 7, 30, 90, 365]) ? $filter_days : 30;
$since = date('Y-m-d H:i:s', strtotime("-{$filter_days} days"));
// Сводка по брендам
$summary = $db->prepare("
SELECT
b.id,
b.name,
b.logo,
COALESCE(cl.clicks, 0) as clicks,
COALESCE(cv.fd, 0) as fd,
COALESCE(cv.reg, 0) as reg,
COALESCE(cv.anydep, 0) as anydep,
COALESCE(cv.total, 0) as total,
COALESCE(cv.revenue, 0) as revenue
FROM brands b
LEFT JOIN (
SELECT brand_id, COUNT(*) as clicks
FROM stats WHERE event_type='click' AND created_at >= ?
GROUP BY brand_id
) cl ON cl.brand_id = b.id
LEFT JOIN (
SELECT brand_id,
SUM(CASE WHEN event_type='fd' THEN 1 ELSE 0 END) as fd,
SUM(CASE WHEN event_type='reg' THEN 1 ELSE 0 END) as reg,
SUM(CASE WHEN event_type='anydep' THEN 1 ELSE 0 END) as anydep,
COUNT(*) as total,
SUM(payout) as revenue
FROM conversions WHERE created_at >= ?
GROUP BY brand_id
) cv ON cv.brand_id = b.id
WHERE b.status = 'active' AND (cl.clicks > 0 OR cv.total > 0)
ORDER BY cv.revenue DESC, cv.total DESC, cl.clicks DESC
");
$summary->execute([$since, $since]);
$rows = $summary->fetchAll();
// Последние конверсии
$recent = $db->prepare("
SELECT c.*, b.name as brand_name
FROM conversions c
LEFT JOIN brands b ON b.id = c.brand_id
WHERE c.created_at >= ?
ORDER BY c.created_at DESC
LIMIT 100
");
$recent->execute([$since]);
$recent_rows = $recent->fetchAll();
// Итоги
$totals = ['clicks' => 0, 'fd' => 0, 'reg' => 0, 'anydep' => 0, 'total' => 0, 'revenue' => 0.0];
foreach ($rows as $r) {
foreach ($totals as $k => $_) $totals[$k] += $r[$k];
}
$postback_url = (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/postback.php';
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Конверсии — Admin</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
</head>
<body>
<?= admin_nav('conversions') ?>
<div class="container-fluid px-4">
<div class="d-flex align-items-center justify-content-between mb-3 flex-wrap gap-2">
<h5 class="mb-0">Конверсии</h5>
<div class="btn-group btn-group-sm">
<?php foreach ([1=>'Сегодня',7=>'7д',30=>'30д',90=>'90д',365=>'Год'] as $d=>$l): ?>
<a href="?days=<?= $d ?>" class="btn btn-outline-secondary <?= $filter_days===$d?'active':'' ?>"><?= $l ?></a>
<?php endforeach ?>
</div>
</div>
<!-- Postback URL подсказка -->
<div class="alert alert-info py-2 small mb-3">
<i class="bi bi-info-circle me-1"></i>
<strong>Postback URL:</strong>
<code><?= h($postback_url) ?>?subid={subid}&event=fd&payout={cpapayout}</code>
· события: <code>fd</code>, <code>reg</code>, <code>anydep</code>
</div>
<!-- Сводка по брендам -->
<div class="card shadow-sm mb-4">
<div class="card-header fw-semibold">По брендам</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-sm table-hover mb-0 align-middle">
<thead class="table-light">
<tr>
<th>Бренд</th>
<th class="text-center">Клики</th>
<th class="text-center">FD</th>
<th class="text-center">Reg</th>
<th class="text-center">AnyDep</th>
<th class="text-center">Всего конв.</th>
<th class="text-center">CR%</th>
<th class="text-center">Revenue</th>
</tr>
</thead>
<tbody>
<?php foreach ($rows as $r): ?>
<tr>
<td>
<div class="d-flex align-items-center gap-2">
<?php if ($r['logo']): ?>
<img src="<?= h($r['logo']) ?>" style="height:22px;max-width:50px;object-fit:contain">
<?php endif ?>
<span><?= h($r['name']) ?></span>
</div>
</td>
<td class="text-center"><?= number_format($r['clicks']) ?></td>
<td class="text-center"><?= $r['fd'] ?: '—' ?></td>
<td class="text-center"><?= $r['reg'] ?: '—' ?></td>
<td class="text-center"><?= $r['anydep'] ?: '—' ?></td>
<td class="text-center fw-bold"><?= $r['total'] ?: '—' ?></td>
<td class="text-center">
<?php if ($r['clicks'] > 0 && $r['total'] > 0): ?>
<?= round($r['total'] / $r['clicks'] * 100, 1) ?>%
<?php else: ?>—<?php endif ?>
</td>
<td class="text-center <?= $r['revenue'] > 0 ? 'text-success fw-bold' : '' ?>">
<?= $r['revenue'] > 0 ? '$' . number_format($r['revenue'], 2) : '—' ?>
</td>
</tr>
<?php endforeach ?>
<?php if (empty($rows)): ?>
<tr><td colspan="8" class="text-center text-muted py-4">Нет данных за выбранный период</td></tr>
<?php else: ?>
<tr class="table-secondary fw-bold">
<td>Итого</td>
<td class="text-center"><?= number_format($totals['clicks']) ?></td>
<td class="text-center"><?= $totals['fd'] ?: '—' ?></td>
<td class="text-center"><?= $totals['reg'] ?: '—' ?></td>
<td class="text-center"><?= $totals['anydep'] ?: '—' ?></td>
<td class="text-center"><?= $totals['total'] ?: '—' ?></td>
<td class="text-center">
<?php if ($totals['clicks'] > 0 && $totals['total'] > 0): ?>
<?= round($totals['total'] / $totals['clicks'] * 100, 1) ?>%
<?php else: ?>—<?php endif ?>
</td>
<td class="text-center text-success">
<?= $totals['revenue'] > 0 ? '$' . number_format($totals['revenue'], 2) : '—' ?>
</td>
</tr>
<?php endif ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Лог конверсий -->
<?php if (!empty($recent_rows)): ?>
<div class="card shadow-sm mb-4">
<div class="card-header fw-semibold">Лог конверсий (последние 100)</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-sm mb-0" style="font-size:.83rem">
<thead class="table-light">
<tr>
<th>Время</th>
<th>Бренд</th>
<th>Событие</th>
<th>Payout</th>
<th>Country</th>
<th>SubID</th>
<th>MS_ID</th>
<th>Customer_ID</th>
<th>Dynamic</th>
<th>Dynamic2</th>
<th>TID</th>
<th>Dep Sum</th>
</tr>
</thead>
<tbody>
<?php foreach ($recent_rows as $r):
$event_colors = ['fd'=>'success','reg'=>'primary','anydep'=>'info'];
$ec = $event_colors[$r['event_type']] ?? 'secondary';
?>
<tr>
<td class="text-muted"><?= h(substr($r['created_at'],0,16)) ?></td>
<td><?= h($r['brand_name'] ?? '—') ?></td>
<td><span class="badge bg-<?= $ec ?>"><?= h(strtoupper($r['event_type'])) ?></span></td>
<td><?= $r['payout'] > 0 ? '<span class="text-success">$'.number_format($r['payout'],2).'</span>' : '—' ?></td>
<td><?= $r['country'] ? h(strtoupper($r['country'])) : '—' ?></td>
<td class="font-monospace" style="font-size:.75rem"><?= h($r['subid']) ?></td>
<td><?= h($r['ms_id']) ?: '—' ?></td>
<td><?= h($r['customer_id']) ?: '—' ?></td>
<td><?= h($r['dynamic']) ?: '—' ?></td>
<td><?= h($r['dynamic2']) ?: '—' ?></td>
<td><?= h($r['tid']) ?: '—' ?></td>
<td><?= h($r['dep_sum']) ?: '—' ?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
</div>
</div>
<?php endif ?>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>