101 lines
3.4 KiB
PHP
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]);
|
|
}
|
|
}
|
|
?>
|