db->prepare("SELECT u.*, r.name as role_name FROM users u JOIN roles r ON u.role_id = r.id WHERE u.username = :username"); $stmt->bindParam(':username', $username); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC); } public function getUserById($id) { $stmt = $this->db->prepare("SELECT u.*, r.name as role_name FROM users u JOIN roles r ON u.role_id = r.id WHERE u.id = :id"); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC); } public function getAllUsers() { $stmt = $this->db->prepare("SELECT u.*, r.name as role_name FROM users u JOIN roles r ON u.role_id = r.id ORDER BY u.created_at DESC"); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } public function getRoles() { $stmt = $this->db->prepare("SELECT * FROM roles ORDER BY id ASC"); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } public function createUser($data) { $sql = "INSERT INTO users (username, password_hash, role_id, first_name, last_name, status) VALUES (?, ?, ?, ?, ?, ?)"; $stmt = $this->db->prepare($sql); return $stmt->execute([ $data['username'], password_hash($data['password'], PASSWORD_DEFAULT), $data['role_id'], $data['first_name'], $data['last_name'], $data['status'] ?? 'active' ]); } /** * Update last login time * * @param int $userId */ public function updateLastLogin($userId) { $stmt = $this->db->prepare("UPDATE users SET last_login = CURRENT_TIMESTAMP WHERE id = :id"); $stmt->bindParam(':id', $userId, PDO::PARAM_INT); $stmt->execute(); } public function updateUser($data) { if (!empty($data['password'])) { $sql = "UPDATE users SET first_name = ?, last_name = ?, role_id = ?, password_hash = ? WHERE id = ?"; $stmt = $this->db->prepare($sql); return $stmt->execute([ $data['first_name'], $data['last_name'], $data['role_id'], password_hash($data['password'], PASSWORD_DEFAULT), $data['id'] ]); } else { $sql = "UPDATE users SET first_name = ?, last_name = ?, role_id = ? WHERE id = ?"; $stmt = $this->db->prepare($sql); return $stmt->execute([ $data['first_name'], $data['last_name'], $data['role_id'], $data['id'] ]); } } public function updateStatus($userId, $status) { $sql = "UPDATE users SET status = ? WHERE id = ?"; $stmt = $this->db->prepare($sql); return $stmt->execute([$status, $userId]); } public function updatePassword($userId, $newPassword) { $sql = "UPDATE users SET password_hash = ? WHERE id = ?"; $stmt = $this->db->prepare($sql); return $stmt->execute([password_hash($newPassword, PASSWORD_DEFAULT), $userId]); } } ?>