107 lines
3.2 KiB
PHP
107 lines
3.2 KiB
PHP
<?php
|
|
require_once('../assets/php/dao.php');
|
|
include_once('user_dto.php');
|
|
|
|
class UserDAO extends DAO {
|
|
|
|
//Constants:
|
|
private const _USER = "user";
|
|
private const _MANAGER = "manager";
|
|
private const _ADMIN = "admin";
|
|
|
|
//Attributes:
|
|
|
|
//Constructor:
|
|
function __construct($bd_name){
|
|
parent::__construct($bd_name);
|
|
}
|
|
|
|
//Methods:
|
|
|
|
//Encrypt password with SHA254.
|
|
private function encryptPass($password){
|
|
//$password = hash('sha256', $password);
|
|
$password = password_hash($password, PASSWORD_DEFAULT);
|
|
|
|
return $password;
|
|
}
|
|
|
|
//Returns true if the password and hash match, or false otherwise.
|
|
public function verifyPass($password, $passwd){
|
|
return password_verify($password, $passwd);
|
|
}
|
|
|
|
|
|
//All users
|
|
public function allUsersNotM(){
|
|
$sql = sprintf( "SELECT * FROM `users` WHERE users.id NOT IN (SELECT id FROM `manager`)");
|
|
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
|
|
|
while($fila=$resul->fetch_assoc()){
|
|
$users[] = $this->loadUser($fila['id'], $fila['username'], $fila['email'], $fila['passwd'], $fila['rol']);
|
|
}
|
|
$resul->free();
|
|
return $users;
|
|
}
|
|
//Create a new User.
|
|
public function createUser($id, $username, $email, $password, $rol){
|
|
$password = $this->encryptPass($password);
|
|
|
|
$sql = sprintf( "INSERT INTO users( id, username, email, passwd, rol)
|
|
VALUES ( '%s', '%s', '%s', '%s', '%s')",
|
|
$id, $username, $email, $password, $rol );
|
|
|
|
$resul = mysqli_query($this->mysqli, $sql) /*or die ('Error into query database')*/;
|
|
|
|
return $resul;
|
|
}
|
|
|
|
//Returns a query to check if the user name exists.
|
|
public function selectUser($username, $password){
|
|
$username = $this->mysqli->real_escape_string($username);
|
|
|
|
$sql = sprintf( "SELECT * FROM users WHERE username = '%s'", $username );
|
|
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
|
|
|
$resul->data_seek(0);
|
|
while ($fila = $resul->fetch_assoc()) {
|
|
if($username === $fila['username'] && $this->verifyPass($password, $fila['passwd'])){
|
|
$user = $this->loadUser($fila['id'], $fila['username'], $fila['email'], $fila['passwd'], $fila['rol']);
|
|
}
|
|
}
|
|
|
|
//mysqli_free_result($selectUser);
|
|
$resul->free();
|
|
|
|
return $user;
|
|
}
|
|
|
|
//Returns a query to check if the user pass matches.
|
|
public function selectPass($username, $password){
|
|
$username = $this->mysqli->real_escape_string($username);
|
|
$password = $this->mysqli->real_escape_string($password);
|
|
$password = $this->encryptPass($password);
|
|
|
|
$sql = sprintf( "SELECT * FROM users WHERE username = '%s' AND passwd = '%s'", $username, $password);
|
|
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
|
|
|
//return $this->mysqli->query($sql);
|
|
return $resul;
|
|
}
|
|
|
|
//Returns a query to get the user's data.
|
|
public function userData($id){
|
|
$sql = sprintf( "SELECT * FROM users WHERE id = '%d'", $id );
|
|
$resul = mysqli_query($this->mysqli, $sql) or die ('Error into query database');
|
|
|
|
return $resul;
|
|
}
|
|
|
|
//Create a new User Data Transfer Object.
|
|
public function loadUser($id, $username, $email, $password, $rol){
|
|
return new UserDTO($id, $username, $email, $password, $rol);
|
|
}
|
|
|
|
}
|
|
|
|
?>
|