= htmlspecialchars($singleAd['title']) ?>
= date('d.m.Y H:i', $singleAd['created']) ?>
Объявлений пока нет
Будьте первым — подайте объявление!
= htmlspecialchars($ad['title']) ?>
= htmlspecialchars($ad['text']) ?>
'Продажа недвижимости', 'realty-rent' => 'Аренда недвижимости', 'land' => 'Земельные участки', 'commercial' => 'Коммерческая недвижимость', // Транспорт 'cars' => 'Автомобили', 'motorcycles' => 'Мотоциклы и мототехника', 'parts' => 'Запчасти и аксессуары', 'commercial-transport' => 'Коммерческий транспорт', // Работа 'job-vacancy' => 'Вакансии', 'job-resume' => 'Резюме', // Услуги 'services-repair' => 'Ремонт и строительство', 'services-beauty' => 'Красота и здоровье', 'services-education' => 'Обучение и курсы', 'services-transport' => 'Грузоперевозки и транспорт', 'services-home' => 'Бытовые услуги', 'services-it' => 'IT и веб-услуги', 'services-other' => 'Прочие услуги', // Личные вещи 'clothing' => 'Одежда и обувь', 'electronics' => 'Электроника и техника', 'home-garden' => 'Для дома и дачи', 'hobbies' => 'Хобби и отдых', 'kids' => 'Детские товары', // Бизнес 'business-equipment' => 'Оборудование для бизнеса', 'business-ready' => 'Готовый бизнес', // Животные 'pets' => 'Животные', // Прочее 'other' => 'Прочее', ]; // === ФУНКЦИИ === function loadAds($file) { if (!file_exists($file)) return []; $data = file_get_contents($file); return json_decode($data, true) ?: []; } function saveAds($file, array $ads) { file_put_contents($file, json_encode($ads, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); } function cleanupOldAds($file, $days) { $ads = loadAds($file); $cutoff = time() - ($days * 24 * 60 * 60); // Находим удаляемые объявления с изображениями foreach ($ads as $ad) { if ($ad['created'] <= $cutoff && !empty($ad['image']) && file_exists($ad['image'])) { unlink($ad['image']); // Удаляем файл } } $filtered = array_filter($ads, fn($ad) => $ad['created'] > $cutoff); if (count($filtered) !== count($ads)) { saveAds($file, array_values($filtered)); } } function generateId() { return time() . rand(1000, 9999); } function sendTelegramMessage($message) { $token = '5860889160:AAFPQY3k7e6pLVNeFnPHtHvDVKfsvfORg0M'; $chatId = '122937863'; $url = 'https://api.telegram.org/bot' . $token . '/sendMessage'; $data = array( 'chat_id' => $chatId, 'text' => $message, 'parse_mode' => 'HTML' ); $options = array( 'http' => array( 'method' => 'POST', 'header' => "Content-Type:application/x-www-form-urlencoded", 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); return $result; } // === ИНИЦИАЛИЗАЦИЯ === if (!file_exists($ADS_FILE)) { saveAds($ADS_FILE, []); } if (!is_dir($UPLOADS_DIR)) { mkdir($UPLOADS_DIR, 0755, true); } // === МАРШРУТИЗАЦИЯ === $action = $_GET['action'] ?? ''; $viewAd = $_GET['ad'] ?? ''; // Просмотр отдельного объявления $moder = isset($_GET['moder']) && $_GET['moder'] === $MODER_KEY; // Очистка старых объявлений cleanupOldAds($ADS_FILE, $MAX_AGE_DAYS); // Обработка действий if ($_SERVER['REQUEST_METHOD'] === 'POST' && $action === 'add') { $title = trim($_POST['title'] ?? ''); $text = trim($_POST['text'] ?? ''); $phone = trim($_POST['phone'] ?? ''); $category = $_POST['category'] ?? ''; $errors = []; if ($title === '') $errors[] = 'Введите заголовок'; if ($text === '') $errors[] = 'Введите текст объявления'; if ($phone === '') $errors[] = 'Введите телефон'; if ($category === '' || !isset($CATEGORIES[$category])) $errors[] = 'Выберите категорию'; if (mb_strlen($title) > 500) $errors[] = 'Заголовок не более 500 знаков'; if (mb_strlen($text) > 2000) $errors[] = 'Текст не более 2000 знаков'; $imagePath = ''; // Обработка base64 изображения из JavaScript if (!empty($_POST['image_data']) && !empty($_POST['image_ext'])) { $imageData = $_POST['image_data']; $imageExt = $_POST['image_ext']; // Удаляем префикс data:image/jpeg;base64, $base64 = preg_replace('#^data:image/\w+;base64,#i', '', $imageData); $decoded = base64_decode($base64); if ($decoded) { $imageName = generateId() . '.' . $imageExt; $imagePath = 'uploads/' . $imageName; if (!file_put_contents($imagePath, $decoded)) { $errors[] = 'Ошибка сохранения изображения'; $imagePath = ''; } } } // Старый способ через $_FILES (резервный) if (empty($imagePath) && isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) { $allowed = ['image/jpeg', 'image/png', 'image/gif']; if (!in_array($_FILES['image']['type'], $allowed)) { $errors[] = 'Неверный формат изображения (jpg, png, gif)'; } else { $ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION); $imageName = generateId() . '.' . $ext; $imagePath = 'uploads/' . $imageName; if (!move_uploaded_file($_FILES['image']['tmp_name'], $imagePath)) { $errors[] = 'Ошибка загрузки файла'; $imagePath = ''; } } } if (empty($errors)) { $ads = loadAds($ADS_FILE); $adId = generateId(); $ads[] = [ 'id' => $adId, 'title' => $title, 'text' => $text, 'phone' => $phone, 'category' => $category, 'image' => $imagePath, 'created' => time(), 'approved' => 0 ]; saveAds($ADS_FILE, $ads); cleanupOldAds($ADS_FILE, $MAX_AGE_DAYS); // Отправляем уведомление в Telegram $categoryName = $CATEGORIES[$category] ?? $category; $tgMessage = "📢 Новое объявление\n\n"; $tgMessage .= "Категория: {$categoryName}\n"; $tgMessage .= "Заголовок: {$title}\n"; $tgMessage .= "Телефон: {$phone}\n\n"; $tgMessage .= "Текст:\n{$text}\n\n"; $tgMessage .= "Требуется модерация: {$SITE_URL}/index.php?moder={$MODER_KEY}"; sendTelegramMessage($tgMessage); header('Location: index.php?success=1'); exit; } } if ($action === 'approve' && $moder && isset($_GET['id'])) { $ads = loadAds($ADS_FILE); foreach ($ads as &$ad) { if ($ad['id'] === $_GET['id']) { $ad['approved'] = 1; break; } } saveAds($ADS_FILE, $ads); header('Location: index.php?moder=' . $MODER_KEY); exit; } if ($action === 'delete' && $moder && isset($_GET['id'])) { $ads = loadAds($ADS_FILE); // Удаляем файл изображения перед удалением объявления foreach ($ads as $ad) { if ($ad['id'] === $_GET['id'] && !empty($ad['image']) && file_exists($ad['image'])) { unlink($ad['image']); break; } } $ads = array_filter($ads, fn($ad) => $ad['id'] !== $_GET['id']); saveAds($ADS_FILE, array_values($ads)); header('Location: index.php?moder=' . $MODER_KEY); exit; } // === ОТОБРАЖЕНИЕ === $currentCat = $_GET['cat'] ?? ''; $ads = loadAds($ADS_FILE); $displayAds = array_filter($ads, fn($ad) => $moder || $ad['approved']); if ($currentCat !== '' && isset($CATEGORIES[$currentCat])) { $displayAds = array_filter($displayAds, fn($ad) => $ad['category'] === $currentCat); } usort($displayAds, fn($a, $b) => $b['created'] - $a['created']); ?>
🔒 Объявление появится после проверки модератором
= date('d.m.Y H:i', $singleAd['created']) ?>
Будьте первым — подайте объявление!
= htmlspecialchars($ad['text']) ?>