Fix forms: return JSON instead of redirect for AJAX compatibility
- send_plan.php: replace redirect with JSON response - send_ask.php: replace redirect with JSON response - Fixes white page issue (fetch API doesn't follow redirects) - Update .gitignore: allow forms folder but protect .env file
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
require_once 'forms_helper.php';
|
||||
|
||||
// Загружаем настройки из .env
|
||||
load_env_file(__DIR__ . '/.env');
|
||||
$settings = get_forms_settings();
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$telegram = trim($_POST['telegram'] ?? '');
|
||||
$phone = trim($_POST['phone'] ?? '');
|
||||
$subject = trim($_POST['subject'] ?? '');
|
||||
$message = trim($_POST['message'] ?? '');
|
||||
|
||||
// Валидация
|
||||
if (empty($name) || empty($subject) || empty($message)) {
|
||||
$error = "Имя, тема и сообщение обязательны для заполнения.";
|
||||
} elseif (empty($email) && empty($telegram)) {
|
||||
$error = "Укажите email или Telegram ник (одно из двух обязательно).";
|
||||
} elseif (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
$error = "Некорректный email адрес.";
|
||||
} else {
|
||||
// Подготавливаем данные заявки
|
||||
$form_data = [
|
||||
'name' => $name,
|
||||
'email' => $email,
|
||||
'telegram' => $telegram,
|
||||
'phone' => $phone,
|
||||
'subject' => $subject,
|
||||
'message' => $message
|
||||
];
|
||||
|
||||
$success_messages = [];
|
||||
$error_messages = [];
|
||||
|
||||
// 1. Отправка email (если включено)
|
||||
if ($settings['send_email']) {
|
||||
$to = getenv('FORMS_MAIN_EMAIL') ?: "sleeptrip@mail.ru";
|
||||
$email_subject = "Вопрос с сайта: " . $subject;
|
||||
$email_body = "Новый вопрос с сайта:\n\n";
|
||||
$email_body .= "Имя: " . $name . "\n";
|
||||
$email_body .= "Email: " . ($email ?: 'не указан') . "\n";
|
||||
$email_body .= "Telegram: " . ($telegram ?: 'не указан') . "\n";
|
||||
$email_body .= "Телефон: " . ($phone ?: 'не указан') . "\n";
|
||||
$email_body .= "Тема: " . $subject . "\n\n";
|
||||
$email_body .= "Сообщение:\n" . $message . "\n\n";
|
||||
$email_body .= "---\n";
|
||||
$email_body .= "Отправлено с: " . $_SERVER['HTTP_HOST'] . "\n";
|
||||
$email_body .= "Дата: " . date('Y-m-d H:i:s') . "\n";
|
||||
|
||||
$from_email = getenv('FORMS_FROM_EMAIL') ?: 'noreply@sleeptrip.ru';
|
||||
$headers = "From: " . $from_email . "\r\n";
|
||||
if (!empty($email)) {
|
||||
$headers .= "Reply-To: " . $email . "\r\n";
|
||||
}
|
||||
$headers .= "X-Mailer: PHP/" . phpversion();
|
||||
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
|
||||
|
||||
if (mail($to, $email_subject, $email_body, $headers)) {
|
||||
$success_messages[] = "Email отправлен";
|
||||
} else {
|
||||
$error_messages[] = "Ошибка отправки email";
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Сохранение в JSON (если включено)
|
||||
if ($settings['save_json']) {
|
||||
$json_saved = save_application_to_json($form_data, 'ask');
|
||||
if ($json_saved) {
|
||||
$success_messages[] = "Вопрос сохранен";
|
||||
} else {
|
||||
$error_messages[] = "Ошибка сохранения вопроса";
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Уведомление в Telegram (если включено)
|
||||
if ($settings['send_telegram'] && $settings['notifications']) {
|
||||
$telegram_sent = send_telegram_notification($form_data, 'ask');
|
||||
if ($telegram_sent) {
|
||||
$success_messages[] = "Уведомление отправлено";
|
||||
} else {
|
||||
$error_messages[] = "Ошибка уведомления в Telegram";
|
||||
}
|
||||
}
|
||||
|
||||
// Формируем итоговое сообщение
|
||||
if (!empty($success_messages)) {
|
||||
$success = "Сообщение отправлено! Мы ответим вам в ближайшее время.";
|
||||
// Очистить форму
|
||||
$name = $email = $telegram = $phone = $subject = $message = '';
|
||||
}
|
||||
|
||||
if (!empty($error_messages) && empty($success_messages)) {
|
||||
$error = "Ошибка отправки. Попробуйте еще раз или свяжитесь через Telegram.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Возвращаем JSON для AJAX совместимости
|
||||
if (isset($success)) {
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'message' => $success
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
} elseif (isset($error)) {
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode([
|
||||
'success' => false,
|
||||
'error' => $error
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user