Bienvenidos sean a este post, hoy continuaremos con lo iniciado en el post anterior.
En el post anterior creamos una nuevo archivo llamado usuarios.php dentro del directorio app/Controllers, a partir de este momento comenzaremos a ingresar nuestros metodos necesarios, comencemos agregando la siguiente propiedad dentro de la clase:
protected $usuario;
Este lo usaremos a lo largo de toda la clase como hicimos con otras, nuestro siguiente paso sera agregar el constructor en la clase:
public function __construct()
{
parent::__construct();
if(!Sesion::get("logueado"))
Url::redireccionar('/admin/login');
$this->usuario = new Usuario();
}
En nuestro constructor iniciaremos al constructor de nuestra clase padre, luego chequearemos que exista la clave «logueado», la cual como vimos hasta ahora sera la indicadora de que el usuario esta ingresado en el sistema, en este caso chequeamos si la clave no existe y si es verdad, nos enviara a la pagina de ingreso del usuario, si esta condicion no se cumple procede a utilizar la variable antes declarada para crear un objeto de la clase Usuarios, pasemos a agregar el siguiente metodo:
public function index()
{
$usuarios = $this->usuario->get_usuarios();
$titulo = 'Usuarios';
$this->view->render('admin/users/index',
compact('usuarios', 'titulo'));
}
Este sera el metodo que mostrara al archivo index, del cual hablaremos en el siguiente post, primero tendremos una variable donde almacenaremos el resultado del metodo get_usuarios, del cual hablamos en el post anterior, despues definiremos una variable para el titulo y por ultimo usamos a render para mostrar la pagina que por el momento no existe y le enviaremos tanto el resultado del metodo get_usuarios como el titulo, pasemos a agregar el siguiente metodo:
public function add()
{
$errores = [];
if (isset($_POST['submit']))
{
$user=(isset($_POST['user']) ? $_POST['user'] : null);
$email=(isset($_POST['email']) ?
$_POST['email'] : null);
$password=(isset($_POST['password']) ?
$_POST['password'] : null);
$password_confirm=(isset($_POST['password_confirm']) ?
$_POST['password_confirm'] : null);
if (strlen($user) < 3)
{
$errores[] = "Usuario muy corto.";
} else {
if ($user == $this->usuario->
get_username($user))
{
$errores[]="El usuario ya existe.";
}
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$errores[]="Ingrese un email valido.";
} else {
if ($email == $this->usuario->
get_email($email))
{
$errores[]="El email ya existe.";
}
}
if ($password != $password_confirm)
{
$errores[] = "Claves no coinciden";
} elseif (strlen($password) < 3) {
$errores[] = "La clave es muy corta.";
}
if (count($errores) == 0)
{
$datos = [
'usuario' => $user,
'email' => $email,
'clave' => password_hash(
$password, PASSWORD_BCRYPT)
];
$this->usuario->insert($datos);
Sesion::set('exito','Usuario creado');
Url::redireccionar('/usuarios');
}
}
$titulo="Agregar usuario";
$this->view->render('admin/users/add',
compact('errores','titulo'));
}
Primero definimos un array vacio llamado errores, luego tenemos un condicional donde verificamos que se haya presionado el submit, en caso de ser verdadero, recibirmos los siguientes datos del formulario:
- user, el campo del usaurio
- email, el campo del correo electronico
- password, el campo de la contraseña
- password_confirm, el campo de la confirmacion de la contraseña
Luego tendremos tres condicionales para verificar la informacion ingresada, en el primero verificamos el usuario ingresado donde la primera condicion verifica la longitud de este, si es menor a tres asignara un error al array llamado errores, en la segunda condicion verificamos si existe el usuario, para ello usaremos el metodo get_username (del cual hablamos en el post anterior), en caso de existir alguno asigna un valor a errores indicando esto.
El siguiente bloque de condicionales verifica el email, primero verifica si este no es valido, en caso de ser verdadero lo almacena en errores, la siguiente condicion verifica si existe la direccion de correo y en caso de ser verdadero procede a almacenar esto en errores.
El ultimo bloque de condicionales verifica la password o contraseña, primero verifica si tanto la contraseña como la confirmacion son distintas, en caso de ser verdadero lo almacena en errores, la siguiente condicion verifica la longitud de la contraseña, si esta es menor a tres almacena en errores esta falla, con esto podemos contemplar todas las posibles fallas en la carga para impedir la subida del usuario a la tabla.
El siguiente condicional verifica si errores es igual a cero, si esto es verdad indica que no se cumplio ninguna de las condiciones anteriores por lo tanto podemos proceder a crear el usuario, en este caso crearemos un array llamado datos, donde crearemos unas claves correspondientes a los campos que usamos en la tabla, y cada valor seran los pasados del formulario, despues usaremos al insert para ingresarlos, creamos una nueva clave llamada exito y por ultimo nos redireccionamos de nuevo a usuarios, por fuera de estas condiciones tenemos el titulo y el metodo render para abrir la pagina para agregar usuarios donde pasaremos el titulo y los errores (en caso de haberlos), pasemos a agregar el siguiente metodo:
public function edit($id)
{
if (!is_numeric($id))
Url::redireccionar('/usuarios');
$usuario=$this->usuario->get_usuario($id);
if ($usuario==null)
Url::redireccionar('/404');
$errores = [];
if (isset($_POST['submit']))
{
$user=(isset($_POST['user']) ? $_POST['user'] : null);
$email=(isset($_POST['email']) ?
$_POST['email'] : null);
$password=(isset($_POST['password']) ?
$_POST['password'] : null);
$password_confirm=(isset($_POST['password_confirm']) ?
$_POST['password_confirm'] : null);
if (strlen($user) < 3)
$errores[]='Usuario muy corto';
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
$errores[]='Ingresa un email valido';
if ($password!=null)
{
if ($password!=$password_confirm)
{
$errores[]='Las claves no coinciden.';
} elseif(strlen($password) < 3) {
$errores[]='Clave muy corta.';
}
}
if (count($errores) == 0)
{
$datos = [
'usuario' => $user,
'email' => $email
];
if ($password != null)
$datos['clave'] = password_hash(
$password,PASSWORD_BCRYPT);
$where = ['id'=>$id];
$this->usuario->update($datos, $where);
Sesion::set('exito','Usuario modificado');
Url::redireccionar('/usuarios');
}
}
$titulo = 'Editar usuario';
$this->view->render('admin/users/edit',
compact('usuario','errores','titulo'));
}
En este metodo lo primero que verificarmos es si el argumento informado es numerico, en caso de no ser asi procede a redireccionarse de nuevo a la pagina de usuarios, lo siguiente sera obtener el usuario en base al id informado y almacenarlo en usuario, el siguiente paso sera un condicional donde verifica si el valor en usuario es igual a null, en caso de ser verdadero nos redirecciona al indicador 404, luego creamos nuestro array vacio de errores, de vuelta tenemos un condicional para verificar si hicimos el submit, este bloque es muy similar al metodo anterior pero veamos como es.
Las primeras cuatro lineas seran para obtener los cuatro valores provenientes del formulario, tal como vimos anteriormente, despues tenemos un grupo de condicionales para ver que la informacion fue bien cargada, en el primer condicional verificamos que el usuario ingresado no sea demasiado corto, si se cumple que es menor a tres se procede a almacenarlo en errores.
El siguiente condicional verifica que el email sea valido, en caso de no serlo lo almacena en errores, lo siguiente verifica si password es distinta de null, en caso de ser asi procede a comparar si ambas contraseñas son distintas en caso de ser verdadero procede a almacenar en errores el error, el siguiente condicional verifica si password es menor a 3, en caso de ser asi procede a informar que la clave es muy corta y lo almacena en errores.
El siguiente condicional verifica que errores no tenga nada, en caso de ser verdadero procede a crear un array llamada datos para almacenar el nuevo usuario y el nuevo mail, luego tenemos un condicional donde verifica si password es distinto de null, y en caso de ser verdadero crea el hash de la clave y la almacena en datos con la clave identificada como clave, despues creamos un array where para pasar el id, el siguiente paso sera modificarlo por medio de update pasando datos y where, despues establecemos una nueva clave llamada exito y por ultimo nos redireccionamos a usuarios, para ir finalizando creamos una variable llamada titulo y utilizamos a render para cargar la pagina de edit donde pasaremos el usuario, los errores (en caso de haberlos) y el titulo, por ultimo agregaremos el siguiente metodo:
public function delete($id)
{
if (!is_numeric($id))
Url::redireccionar('/usuarios');
if (Sesion::get('id_usuario') == $id)
die('No te puedes eliminar a ti mismo!');
$usuario=$this->usuario->get_usuario($id);
if ($usuario == null)
Url::redirecionar('/404');
$where=['id' => $usuario->id];
$this->usuario->delete($where);
Sesion::set('exito','Usuario eliminado');
Url::redireccionar('/usuarios');
}
Este metodo sera el encargado de eliminar los usuarios no necesarios, primero chequearemos que el id sea numerico, si no lo es vuelve a cargar la clase, el siguiente condicional verifica que el id que deseamos borrar no sea el nuestro, en caso de ser asi procede a terminar con la ejecucion y nos lo muestra en pantalla, lo siguiente sera obtener el usuario en base al id informado, despues tenemos un condicional donde verifica si es igual a null, en caso de ser verdadero procede a redireccionarnos al error 404, que por el momento no existe, si todo va bien crearemos un array para almacenar el id, despues lo usaremos con el metodo delete de la clase usuarios, despues crearemos una clave llamada exito para almacenar que el usuario fue eliminado con exito, por ultimo nos redireccionamos nuevamente a usuarios, con esto tenemos todos los metodos para la clase usuarios, veamos el codigo final hasta ahora:
usuarios.php
<?php
namespace App\Controllers;
use System\ControladorBase;
use App\Helpers\Sesion;
use App\Helpers\Url;
use App\Modelos\Usuario;
class Usuarios extends ControladorBase
{
protected $usuario;
public function __construct()
{
parent::__construct();
if(!Sesion::get("logueado"))
Url::redireccionar('/admin/login');
$this->usuario = new Usuario();
}
public function index()
{
$usuarios = $this->usuario->get_usuarios();
$titulo = 'Usuarios';
$this->view->render('admin/users/index',
compact('usuarios', 'titulo'));
}
public function add()
{
$errores = [];
if (isset($_POST['submit']))
{
$user=(isset($_POST['user']) ? $_POST['user'] : null);
$email=(isset($_POST['email']) ?
$_POST['email'] : null);
$password=(isset($_POST['password']) ?
$_POST['password'] : null);
$password_confirm=(isset($_POST['password_confirm']) ?
$_POST['password_confirm'] : null);
if (strlen($user) < 3)
{
$errores[] = "Usuario muy corto.";
} else {
if ($user == $this->usuario->
get_username($user))
{
$errores[]="El usuario ya existe.";
}
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$errores[]="Ingrese un email valido.";
} else {
if ($email == $this->usuario->
get_email($email))
{
$errores[]="El email ya existe.";
}
}
if ($password != $password_confirm)
{
$errores[] = "Claves no coinciden";
} elseif (strlen($password) < 3) {
$errores[] = "La clave es muy corta.";
}
if (count($errores) == 0)
{
$datos = [
'usuario' => $user,
'email' => $email,
'clave' => password_hash(
$password, PASSWORD_BCRYPT)
];
$this->usuario->insert($datos);
Sesion::set('exito','Usuario creado');
Url::redireccionar('/usuarios');
}
}
$titulo="Agregar usuario";
$this->view->render('admin/users/add',
compact('errores','titulo'));
}
public function edit($id)
{
if (!is_numeric($id))
Url::redireccionar('/usuarios');
$usuario=$this->usuario->get_usuario($id);
if ($usuario==null)
Url::redireccionar('/404');
$errores = [];
if (isset($_POST['submit']))
{
$user=(isset($_POST['user']) ? $_POST['user'] : null);
$email=(isset($_POST['email']) ?
$_POST['email'] : null);
$password=(isset($_POST['password']) ?
$_POST['password'] : null);
$password_confirm=(isset($_POST['password_confirm']) ?
$_POST['password_confirm'] : null);
if (strlen($user) < 3)
$errores[]='Usuario muy corto';
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
$errores[]='Ingresa un email valido';
if ($password!=null)
{
if ($password!=$password_confirm)
{
$errores[]='Las claves no coinciden.';
} elseif(strlen($password) < 3) {
$errores[]='Clave muy corta.';
}
}
if (count($errores) == 0)
{
$datos = [
'usuario' => $user,
'email' => $email
];
if ($password != null)
$datos['clave'] = password_hash(
$password,PASSWORD_BCRYPT);
$where = ['id'=>$id];
$this->usuario->update($datos, $where);
Sesion::set('exito','Usuario modificado');
Url::redireccionar('/usuarios');
}
}
$titulo = 'Editar usuario';
$this->view->render('admin/users/edit',
compact('usuario','errores','titulo'));
}
public function delete($id)
{
if (!is_numeric($id))
Url::redireccionar('/usuarios');
if (Sesion::get('id_usuario') == $id)
die('No te puedes eliminar a ti mismo!');
$usuario=$this->usuario->get_usuario($id);
if ($usuario == null)
Url::redirecionar('/404');
$where=['id' => $usuario->id];
$this->usuario->delete($where);
Sesion::set('exito','Usuario eliminado');
Url::redireccionar('/usuarios');
}
}
Hasta aqui tenemos todos lo metodos pero todavia nos falta las paginas para que el usuario interactue pero eso lo veremos en el proximo post.
En resumen, hoy hemos visto los metodos constructores, de index (para cargar la pagina), el metodo para agregar nuevos usuarios, para modificarlos (edit) y para eliminarlos, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
