query("SELECT * FROM charity_settings WHERE id = 1"); $charity = $stmt->fetch(); // Check if we are in reset mode (token in URL) $token = $_GET['token'] ?? ''; if ($token) { $stmt = db()->prepare("SELECT * FROM users WHERE reset_token = ? AND reset_token_expiry > NOW()"); $stmt->execute([$token]); $user = $stmt->fetch(); if ($user) { $step = 'reset'; } else { $error = 'رابط استعادة كلمة المرور غير صالح أو منتهي الصلاحية.'; $step = 'request'; } } // Handle POST requests if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['request_reset'])) { $email = trim($_POST['email'] ?? ''); if (filter_var($email, FILTER_VALIDATE_EMAIL)) { $stmt = db()->prepare("SELECT id, full_name FROM users WHERE email = ?"); $stmt->execute([$email]); $user = $stmt->fetch(); if ($user) { $newToken = bin2hex(random_bytes(32)); $expiry = date('Y-m-d H:i:s', strtotime('+1 hour')); $update = db()->prepare("UPDATE users SET reset_token = ?, reset_token_expiry = ? WHERE id = ?"); $update->execute([$newToken, $expiry, $user['id']]); $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http'; $host = $_SERVER['HTTP_HOST']; $resetLink = "$protocol://$host/forgot_password.php?token=$newToken"; $subject = "استعادة كلمة المرور - " . ($charity['charity_name'] ?? 'الجمعية الخيرية'); $html = "

مرحباً {$user['full_name']}

لقد طلبت استعادة كلمة المرور الخاصة بك. يرجى الضغط على الرابط أدناه لإعادة تعيينها:

إعادة تعيين كلمة المرور

هذا الرابط صالح لمدة ساعة واحدة فقط.

إذا لم تطلب هذا، يرجى تجاهل هذه الرسالة.

"; $res = MailService::sendMail($email, $subject, $html); if ($res['success']) { $success = 'تم إرسال رابط استعادة كلمة المرور إلى بريدك الإلكتروني.'; } else { $error = 'فشل إرسال البريد الإلكتروني. يرجى المحاولة لاحقاً أو التواصل مع الإدارة.'; } } else { // For security, don't reveal if email exists, but here we can be more helpful if it's a closed admin panel $error = 'البريد الإلكتروني غير مسجل لدينا.'; } } else { $error = 'يرجى إدخال بريد إلكتروني صحيح.'; } } elseif (isset($_POST['reset_password'])) { $password = $_POST['password'] ?? ''; $confirm = $_POST['confirm_password'] ?? ''; if (strlen($password) < 6) { $error = 'كلمة المرور يجب أن تكون 6 أحرف على الأقل.'; } elseif ($password !== $confirm) { $error = 'كلمات المرور غير متطابقة.'; } else { $hashed = password_hash($password, PASSWORD_DEFAULT); $update = db()->prepare("UPDATE users SET password = ?, reset_token = NULL, reset_token_expiry = NULL WHERE id = ?"); $update->execute([$hashed, $user['id']]); $success = 'تم تغيير كلمة المرور بنجاح. يمكنك الآن تسجيل الدخول.'; $step = 'completed'; } } } ?>
Logo

استعادة كلمة المرور

بريد

أدخل البريد الإلكتروني المرتبط بحسابك.