© 2025 Attendance Management System. All rights reserved.

/** * Login Page * User authentication interface */ // Load configuration and core classes require_once __DIR__ . '/../../config/app/config.php'; require_once __DIR__ . '/../../config/database/database.php'; require_once __DIR__ . '/../../includes/classes/Session.php'; require_once __DIR__ . '/../../includes/classes/Database.php'; require_once __DIR__ . '/../../includes/helpers/Helper.php'; require_once __DIR__ . '/../../includes/helpers/Logger.php'; // Initialize session Session::init(); // Check if user is already logged in if (Session::isLoggedIn()) { $role = Session::getRole(); switch ($role) { case 'admin': header("Location: /modules/admin/dashboard.php"); break; case 'manager': header("Location: /modules/manager/dashboard.php"); break; case 'employee': header("Location: /modules/attendance/attendance.php"); break; default: header("Location: /modules/attendance/attendance.php"); break; } exit(); } $error = ''; $success = ''; // Handle login form submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $email = $_POST['email'] ?? ''; $password = $_POST['password'] ?? ''; $rememberMe = isset($_POST['remember_me']); if (empty($email) || empty($password)) { $error = 'Please enter both email and password'; } else { try { $db = Database::getInstance(); // Get user by email $stmt = $db->prepare("SELECT * FROM users WHERE email = ? AND status = 'active'"); $stmt->execute([$email]); $user = $stmt->fetch(); if ($user && password_verify($password, $user['password'])) { // Set user session Session::setUserSession($user); // Set remember me cookie if requested if ($rememberMe) { $token = Helper::generateRandomString(32); $expiry = date('Y-m-d H:i:s', time() + REMEMBER_ME_DURATION); // Store remember me token in database $stmt = $db->prepare("INSERT INTO remember_tokens (user_id, token, expires_at) VALUES (?, ?, ?)"); $stmt->execute([$user['id'], $token, $expiry]); Session::setRememberMe($user['id'], $token); } // Log successful login Logger::log("User {$user['id']} performed action: login - User logged in successfully"); // Redirect based on role switch ($user['role']) { case 'admin': header("Location: /modules/admin/dashboard.php"); break; case 'manager': header("Location: /modules/manager/dashboard.php"); break; case 'employee': header("Location: /modules/attendance/attendance.php"); break; default: header("Location: /modules/attendance/attendance.php"); break; } exit(); } else { $error = 'Invalid email or password'; Logger::log("Failed login attempt for email: {$email}"); } } catch (Exception $e) { $error = 'Login failed. Please try again.'; Logger::log("Login error: " . $e->getMessage()); } } } // Check for remember me cookie if (!Session::isLoggedIn() && Session::hasRememberMe()) { try { $db = Database::getInstance(); $userId = Session::getRememberUserId(); $token = Session::getRememberToken(); // Validate remember me token $stmt = $db->prepare("SELECT * FROM remember_tokens WHERE user_id = ? AND token = ? AND expires_at > NOW() AND used = 0"); $stmt->execute([$userId, $token]); $rememberToken = $stmt->fetch(); if ($rememberToken) { // Get user data $stmt = $db->prepare("SELECT * FROM users WHERE id = ? AND status = 'active'"); $stmt->execute([$userId]); $user = $stmt->fetch(); if ($user) { // Set user session Session::setUserSession($user); // Mark token as used $stmt = $db->prepare("UPDATE remember_tokens SET used = 1 WHERE id = ?"); $stmt->execute([$rememberToken['id']]); // Log auto login Logger::log("User {$user['id']} performed action: auto_login - User auto-logged in via remember me cookie"); // Redirect based on role switch ($user['role']) { case 'admin': header("Location: /modules/admin/dashboard.php"); break; case 'manager': header("Location: /modules/manager/dashboard.php"); break; case 'employee': header("Location: /modules/attendance/attendance.php"); break; default: header("Location: /modules/attendance/attendance.php"); break; } exit(); } } } catch (Exception $e) { // Clear invalid remember me cookies Session::clearRememberMe(); Logger::log("Remember me error: " . $e->getMessage()); } } ?> Login - Attendance Management System

© 2025 Attendance Management System. All rights reserved.