Files
2026-09-16 23:20:08 +07:00

101 lines
3.4 KiB
PHP

<?php
namespace app\Models;
use PDO;
class UserModel extends Model {
/**
* Get user by username
*
* @param string $username
* @return array|false
*/
public function getUserByUsername($username) {
$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.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]);
}
}
?>