2021-09-20 03:09:08 +02:00
|
|
|
<?php
|
2022-01-20 09:58:26 +01:00
|
|
|
/*
|
|
|
|
* Este archivo es parte de Nabu.
|
|
|
|
*
|
|
|
|
* Nabu es software libre: puedes redistribuirlo y/o modificarlo
|
|
|
|
* bajo los términos de la Licencia Pública General de GNU Affero publicada por
|
|
|
|
* la Free Software Foundation, ya sea la versión 3 de la Licencia, o
|
|
|
|
* (a su elección) cualquier versión posterior.
|
|
|
|
*
|
|
|
|
* Nabu se distribuye con la esperanza de que sea de utilidad,
|
|
|
|
* pero SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de
|
|
|
|
* COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. Consulte la
|
|
|
|
* Licencia Pública General de GNU Affero para obtener más detalles.
|
|
|
|
*
|
|
|
|
* Debería haber recibido una copia de la Licencia Pública General de GNU Affero
|
|
|
|
* junto con este programa. De lo contrario, consulte <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2021-09-20 03:09:08 +02:00
|
|
|
|
2021-10-06 21:02:20 +02:00
|
|
|
defined('NABU') || exit();
|
2021-09-20 03:09:08 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
class usersModel extends dbConnection {
|
|
|
|
public function __construct() {
|
|
|
|
parent::__construct();
|
|
|
|
}
|
2021-09-20 03:09:08 +02:00
|
|
|
|
2022-02-21 20:22:21 +01:00
|
|
|
// @return un array con los datos de varios usuarios.
|
2022-02-20 20:09:06 +01:00
|
|
|
public function find_users(string $username, string $email) {
|
2022-01-25 08:38:03 +01:00
|
|
|
$query = 'SELECT u.id, u.username, u.email, u.password, u.activated, ' .
|
2022-01-20 09:58:26 +01:00
|
|
|
'a.hash, a.expiration FROM users AS u ' .
|
|
|
|
'LEFT JOIN authentications AS a ON u.id = a.id ' .
|
|
|
|
'WHERE u.username = ? OR u.email = ? LIMIT 2';
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
try {
|
|
|
|
$prepare = $this -> pdo -> prepare($query);
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
$prepare -> execute(array($username, $email));
|
2021-09-27 05:04:37 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
$users = $prepare -> fetchAll();
|
2021-09-27 05:04:37 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
if (empty($users))
|
|
|
|
$users = array();
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
return $users;
|
|
|
|
}
|
|
|
|
catch (PDOException $e) {
|
2022-02-17 21:54:05 +01:00
|
|
|
$this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los datos de varios usuarios');
|
2021-09-27 04:38:35 +02:00
|
|
|
}
|
2022-01-20 09:58:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Elimina un usuario.
|
2022-02-20 20:09:06 +01:00
|
|
|
public function delete_user(int $id) {
|
2022-01-20 09:58:26 +01:00
|
|
|
$query = 'DELETE FROM users WHERE id = ?';
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
try {
|
|
|
|
$this -> pdo -> prepare($query) -> execute(array($id));
|
2021-09-27 03:27:23 +02:00
|
|
|
}
|
2022-01-20 09:58:26 +01:00
|
|
|
catch (PDOException $e) {
|
|
|
|
$this -> errors($e -> getMessage(), 'tuvimos un problema para eliminar una cuenta de usuario');
|
|
|
|
}
|
|
|
|
}
|
2021-09-27 03:27:23 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
// Registra un nuevo usuario.
|
2022-02-20 20:09:06 +01:00
|
|
|
public function save_user(array $data) {
|
2022-01-20 09:58:26 +01:00
|
|
|
$query = 'INSERT INTO users(name, username, email, password, registration_date) ' .
|
|
|
|
'VALUES(:name, :username, :email, :password, :registration_date)';
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
try {
|
|
|
|
$this -> pdo -> prepare($query) -> execute($data);
|
|
|
|
}
|
|
|
|
catch (PDOException $e) {
|
2022-02-17 21:54:05 +01:00
|
|
|
$this -> errors($e -> getMessage(), 'tuvimos un problema para registrar una cuenta de usuario');
|
2022-01-20 09:58:26 +01:00
|
|
|
}
|
|
|
|
}
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-02-20 20:09:06 +01:00
|
|
|
// @return un array asociativo con los datos de un usuario.
|
|
|
|
public function get_user(string $column, $pattern) {
|
2022-02-19 16:26:49 +01:00
|
|
|
$query = 'SELECT u.id, u.role_id AS role, u.username, u.email, u.password, ' .
|
|
|
|
'u.activated, u.registration_date, a.hash, a.expiration FROM users AS u ' .
|
2022-01-20 09:58:26 +01:00
|
|
|
'LEFT JOIN authentications AS a ON u.id = a.id ' .
|
|
|
|
'WHERE u.' . $column . ' = ? LIMIT 1';
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
try {
|
|
|
|
$prepare = $this -> pdo -> prepare($query);
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
$prepare -> execute(array($pattern));
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
$user = $prepare -> fetch();
|
2021-10-07 09:15:33 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
if (empty($user))
|
|
|
|
return array();
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
$user['role'] = $this -> role($user['role']);
|
2021-09-27 04:38:35 +02:00
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
return $user;
|
2021-09-27 04:38:35 +02:00
|
|
|
}
|
2022-01-20 09:58:26 +01:00
|
|
|
catch (PDOException $e) {
|
2022-02-17 21:54:05 +01:00
|
|
|
$this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los datos de un usuario');
|
2021-09-27 00:34:26 +02:00
|
|
|
}
|
2022-01-20 09:58:26 +01:00
|
|
|
}
|
|
|
|
|
2022-01-24 00:25:16 +01:00
|
|
|
// Actualiza los datos de un usuario.
|
2022-02-20 20:09:06 +01:00
|
|
|
public function update_user(int $id, array $data) {
|
2022-01-24 00:25:16 +01:00
|
|
|
$columns = array_keys($data);
|
|
|
|
$query = '';
|
|
|
|
|
|
|
|
foreach ($columns as $column)
|
|
|
|
$query = $query . $column . ' = :' . $column . ', ';
|
|
|
|
|
|
|
|
$query = 'UPDATE users SET ' . rtrim($query, ', ') . ' WHERE id = :id';
|
|
|
|
|
|
|
|
$data['id'] = $id;
|
|
|
|
|
|
|
|
try {
|
|
|
|
$this -> pdo -> prepare($query) -> execute($data);
|
|
|
|
}
|
|
|
|
catch (PDOException $e) {
|
2022-02-17 21:54:05 +01:00
|
|
|
$this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar los datos personales de un usuario');
|
2022-01-24 00:25:16 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-20 09:58:26 +01:00
|
|
|
public function __destruct() {
|
|
|
|
parent::__destruct();
|
|
|
|
$this -> pdo = null;
|
|
|
|
}
|
2021-09-20 03:09:08 +02:00
|
|
|
}
|