0, 'results' => []]; $data = $json['results']; if (isset($_GET['ajax_check'])) { $id = $_GET['id'] ?? ''; $callsign = strtoupper(trim($_GET['callsign'] ?? '')); $response = [ 'idInvalid' => !preg_match('/^\d{6,7}$/', $id), 'idExists' => false, 'callsignInvalid' => !preg_match('/^[A-Z0-9]{4,7}$/', $callsign), 'callsignExists' => false ]; foreach ($data as $row) { if ($row['id'] == $id) $response['idExists'] = true; if (strtoupper($row['callsign']) === $callsign) $response['callsignExists'] = true; } header('Content-Type: application/json'); echo json_encode($response); exit; } if (isset($_GET['sync'])) { $confirmed = []; foreach ($data as $item) { if (!empty($item['confirmed'])) { $confirmed["{$item['id']};{$item['callsign']};"] = true; } } $lines = file($datFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $filtered = array_filter($lines, function($line) use ($confirmed) { return isset($confirmed[trim($line)]); }); $existingLines = array_flip(array_map('trim', $lines)); foreach ($confirmed as $entry => $val) { if (!isset($existingLines[$entry])) { $filtered[] = $entry; } } file_put_contents($datFile, implode(PHP_EOL, $filtered) . PHP_EOL); header("Location: " . strtok($_SERVER["REQUEST_URI"], '?')); exit; } if (isset($_GET['confirm'])) { $confirmId = (int)$_GET['confirm']; foreach ($data as &$item) { if ($item['id'] === $confirmId) { $item['confirmed'] = true; $lines = file($datFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $entry = "{$item['id']};{$item['callsign']};"; if (!in_array($entry, $lines)) { file_put_contents($datFile, $entry . PHP_EOL, FILE_APPEND); } break; } } unset($item); $json['results'] = $data; $json['count'] = count($data); file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); header("Location: " . strtok($_SERVER["REQUEST_URI"], '?')); exit; } if (isset($_GET['block'])) { $confirmId = (int)$_GET['block']; foreach ($data as &$item) { if ($item['id'] === $confirmId) { $item['confirmed'] = false; $lines = file($datFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $entry = "{$item['id']};{$item['callsign']};"; $filtered = array_filter($lines, function($line) use ($entry) { return trim($line) !== $entry; }); file_put_contents($datFile, implode(PHP_EOL, $filtered) . PHP_EOL); break; } } unset($item); $json['results'] = $data; $json['count'] = count($data); file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); header("Location: " . strtok($_SERVER["REQUEST_URI"], '?')); exit; } if (isset($_GET['delete'])) { $deleteId = (int)$_GET['delete']; $callsign = null; foreach ($data as $index => $item) { if ($item['id'] === $deleteId) { $callsign = $item['callsign']; unset($data[$index]); break; } } $data = array_values($data); if ($callsign === null) { header("Location: " . strtok($_SERVER["REQUEST_URI"], '?')); exit; } $json['results'] = $data; $json['count'] = count($data); file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); $lines = file($datFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $filtered = array_filter($lines, function($line) use ($deleteId, $callsign) { return trim($line) !== "{$deleteId};{$callsign};"; }); file_put_contents($datFile, implode(PHP_EOL, $filtered) . PHP_EOL); header("Location: " . strtok($_SERVER["REQUEST_URI"], '?')); exit; } $form_error = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $new_id = (int)$_POST['new_id']; $callsign = strtoupper(trim($_POST['new_callsign'])); $fname = trim($_POST['fname'] ?? ''); $surname = trim($_POST['surname'] ?? ''); $city = trim($_POST['city'] ?? ''); $state = trim($_POST['state'] ?? ''); $country = trim($_POST['country'] ?? ''); $remarks = trim($_POST['remarks'] ?? ''); if ($new_id < 100000 || $new_id > 9999999) { $form_error = 'ID должен быть 6–7 цифр.'; } elseif (!preg_match('/^[A-Z0-9]{4,7}$/', $callsign)) { $form_error = 'Позывной: 4–7 латинских символов/цифр.'; } elseif (array_filter($data, fn($r) => $r['id'] == $new_id || strtoupper($r['callsign']) === $callsign)) { $form_error = 'Такой ID или позывной уже существует.'; } elseif (preg_match('/[^a-zA-Z\s]/', $fname . $surname . $city . $state . $country . $remarks)) { $form_error = 'Дополнительные поля должны содержать только латиницу.'; } else { $data[] = [ 'id' => $new_id, 'callsign' => $callsign, 'fname' => $fname, 'surname' => $surname, 'city' => $city, 'state' => $state, 'country' => $country, 'remarks' => $remarks, 'confirmed' => true ]; $json['results'] = $data; $json['count'] = count($data); file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); $dat_line = "{$new_id};{$callsign};" . PHP_EOL; file_put_contents($datFile, $dat_line, FILE_APPEND); header("Location: admin.php"); exit; } } $confirmed = array_values(array_filter($data, fn($d) => !empty($d['confirmed']))); $page = max(1, (int)($_GET['page'] ?? 1)); $perPage = 15; $total = count($confirmed); $totalPages = ceil($total / $perPage); $offset = ($page - 1) * $perPage; $currentPageData = array_slice($confirmed, $offset, $perPage); ?> Админка DMR
Панель администратора DMR

Заявки

ID:
Позывной:
Имя:
Фамилия:
Город:
Регион:
Страна:
Примечание:
Удалить Заблокировать
1): ?>

Добавить вручную

Ожидают подтверждения