Init Git Prod Mars 2026
This commit is contained in:
commit
d81efe93b1
362 files changed
+86627
No files matched your search
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
// admin/tools/ajax_send_validation_link.php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
require_once __DIR__ . '/../../public/includes/init_admin.php';
|
||||
|
||||
// ID "super admin"
|
||||
const ADMIN_PRACTICIEN_ID = 88888888;
|
||||
$me = (int)($_SESSION['reference_id'] ?? 0);
|
||||
if ($me !== ADMIN_PRACTICIEN_ID) {
|
||||
http_response_code(403);
|
||||
echo json_encode(['ok'=>false, 'error'=>'Доступ запрещён.'], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
function jerr(string $msg, int $code = 400): void {
|
||||
http_response_code($code);
|
||||
echo json_encode(['ok'=>false, 'error'=>$msg], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// CSRF
|
||||
$csrf = $_POST['csrf'] ?? '';
|
||||
if (empty($_SESSION['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $csrf)) {
|
||||
jerr('Ошибка CSRF. Обновите страницу.', 400);
|
||||
}
|
||||
|
||||
$id = (int)($_POST['id'] ?? 0);
|
||||
if ($id <= 0) {
|
||||
jerr('Неверный идентификатор пользователя.', 400);
|
||||
}
|
||||
|
||||
// Загружаем аккаунт
|
||||
$st = $pdo->prepare("SELECT id, email, role FROM compte WHERE id = ? AND role IN ('client','praticien','secretaire')");
|
||||
$st->execute([$id]);
|
||||
$compte = $st->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!$compte) {
|
||||
jerr('Пользователь не найден или роль не поддерживается.', 404);
|
||||
}
|
||||
|
||||
$email = trim($compte['email'] ?? '');
|
||||
if ($email === '') {
|
||||
jerr('У пользователя не указан e-mail.', 400);
|
||||
}
|
||||
|
||||
// Генерируем новый токен
|
||||
try {
|
||||
$token = bin2hex(random_bytes(32));
|
||||
} catch (Exception $e) {
|
||||
jerr('Не удалось сгенерировать токен.', 500);
|
||||
}
|
||||
|
||||
// Сохраняем токен и сбрасываем флаг подтверждения
|
||||
$upd = $pdo->prepare("UPDATE compte SET token_validation = ?, email_valide = 0, modifie_le = NOW() WHERE id = ?");
|
||||
$upd->execute([$token, $compte['id']]);
|
||||
|
||||
// Строим ссылку подтверждения
|
||||
$host = $_SERVER['HTTP_HOST'] ?? 'uslugi.fr';
|
||||
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
|
||||
$validateUrl = $scheme . '://' . $host . '/auth/validate.php?token=' . urlencode($token);
|
||||
|
||||
// Отправка письма (простой mail(), можно заменить на PHPMailer)
|
||||
|
||||
$subject = 'Подтверждение регистрации на uslugi.fr';
|
||||
|
||||
// On prépare le contenu HTML (avec des sauts de ligne <br>)
|
||||
$htmlBody = nl2br(
|
||||
"Здравствуйте!\n\n" .
|
||||
"Вы (или кто-то другой) зарегистрировались на сайте uslugi.fr с этим адресом электронной почты.\n\n" .
|
||||
"Чтобы подтвердить регистрацию, перейдите по следующей ссылке:\n" .
|
||||
"<a href='$validateUrl'>$validateUrl</a>\n\n" .
|
||||
"Если вы не регистрировались на сайте, просто проигнорируйте это письмо.\n\n" .
|
||||
"С уважением,\n" .
|
||||
"Команда uslugi.fr\n"
|
||||
);
|
||||
|
||||
// On garde une version texte pur sans HTML
|
||||
$textBody = strip_tags($htmlBody);
|
||||
|
||||
// REMPLACEMENT DE mail() PAR uslugi_mail()
|
||||
list($sent, $err) = uslugi_mail(
|
||||
$email,
|
||||
$subject, // Plus besoin de base64_encode ici
|
||||
$htmlBody,
|
||||
$textBody,
|
||||
['to_name' => "Пользователь"] // Optionnel : vous pouvez passer le nom si vous l'avez
|
||||
);
|
||||
|
||||
// On adapte le test de succès
|
||||
if (!$sent) {
|
||||
// On affiche l'erreur réelle retournée par Brevo/PHPMailer pour le debug
|
||||
jerr('Ошибка отправки (Brevo): ' . $err, 500);
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
'ok' => true,
|
||||
'message' => 'Ссылка для подтверждения регистрации успешно отправлена на ' . $email
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
Reference in new issue
Block a user