Versión inicial funcional de MyDiary

This commit is contained in:
2026-09-17 23:47:51 +02:00
commit adde97c654
148 changed files with 44990 additions and 0 deletions
+349
View File
@@ -0,0 +1,349 @@
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/MyDiary/includes/conexionBD.php';
class Usuario{
public $idUsuario;
public $username;
public $nombreUsuario;
public $email;
public $contrasena;
public $avatar;
public $fechaRegistro;
public $identificador;
function __construct($idUsuario=null, $username=null, $nombreUsuario=null, $email=null, $contrasena=null, $avatar=null, $fechaRegistro=null){
$this->idUsuario = $idUsuario;
$this->username = $username;
$this->nombreUsuario = $nombreUsuario;
$this->email = $email;
$this->contrasena = $contrasena;
$this->avatar = $avatar;
$this->fechaRegistro = $fechaRegistro;
} // Fin __construct()
public function insertar(){
$conexion = conexionBD();
if(is_array($conexion)){
return $conexion;
}else{
try{
// Comprobamos que el username esté libre
$consulta = $conexion->prepare("SELECT * FROM usuarios WHERE username= :username");
$consulta->bindParam(':username', $this->username);
$consulta->execute();
$resultado = $consulta->fetchAll(PDO::FETCH_ASSOC);
if(count($resultado)>0){
$respuesta = [
'error' => 'Este nombre de usuario ya existe.',
'caso' => 'username'
];
return $respuesta;
}
// Comprobamos que el email esté libre
$consulta = $conexion->prepare("SELECT * FROM usuarios WHERE email= :email");
$consulta->bindParam(':email', $this->email);
$consulta->execute();
$resultado = $consulta->fetchAll(PDO::FETCH_ASSOC);
if(count($resultado)>0){
$respuesta = [
'error' => 'Ya existe un usuario con este correo.',
'caso' => 'email'
];
return $respuesta;
}
$consulta = $conexion->prepare("INSERT INTO usuarios (idUsuario, username, nombreUsuario, email, contrasena, avatar, fechaRegistro) VALUES (:idUsuario, :username, :nombreUsuario, :email, :contrasena, :avatar, :fechaRegistro)");
$consulta->bindParam(':idUsuario', $this->idUsuario);
$consulta->bindParam(':username', $this->username);
$consulta->bindParam(':nombreUsuario', $this->nombreUsuario);
$consulta->bindParam(':email', $this->email);
$consulta->bindParam(':avatar', $this->avatar);
$fechaRegistro=date('Y/m/d');
$consulta->bindParam(':fechaRegistro', $fechaRegistro);
// Ciframos la contraseña
$pass = password_hash($this->contrasena, PASSWORD_DEFAULT);
$consulta->bindParam(':contrasena', $pass);
$consulta->execute();
// Inciamos la sesión al registrarse
$this->idUsuario = $conexion->lastInsertId();
$_SESSION['idUsuario'] = $this->idUsuario;
$_SESSION['username'] = $this->username;
$respuesta = [
'exito' => 'El usuario se registró correctamente.',
'id' => $conexion->lastInsertId()
];
return $respuesta;
}catch(PDOException $error){
$respuesta = [
'error' => 'Ocurrió un error al crear al usuario.',
'error_tecnico' => $error
];
$conexion = null;
return $respuesta;
}
} // Fin else
} // Fin insertar()
public function validar(){
$conexion = conexionBD();
if(is_array($conexion)){
return $conexion;
}else{
try{
$consulta = $conexion->prepare("SELECT * FROM usuarios WHERE username= :identificador OR email= :identificador");
$consulta->bindParam(':identificador', $this->identificador);
$consulta->execute();
$resultado = $consulta->fetchAll(PDO::FETCH_ASSOC);
// Si el usuario no existe
if(count($resultado)==0){
$respuesta = ['error' => 'Usuario o contrasena incorrectos.'];
return $respuesta;
}
$pass = $resultado[0]['contrasena'];
if(password_verify($this->contrasena, $pass)){
// La pass es correcta, el usuario está validado
// Actualizamos variables y también el objeto actual, para que se sepa qué usuario tiene sesión iniciado en cualquier página del proyecto
$_SESSION['idUsuario'] = $resultado[0]['idUsuario'];
$_SESSION['username'] = $resultado[0]['username'];
$_SESSION['nombreUsuario'] = $resultado[0]['nombreUsuario'];
$_SESSION['avatar'] = $resultado[0]['avatar'];
$this->idUsuario = $resultado[0]['idUsuario'];
$this->username = $resultado[0]['username'];
$this->nombreUsuario = $resultado[0]['nombreUsuario'];
$this->email = $resultado[0]['email'];
$this->avatar = $resultado[0]['avatar'];
$this->fechaRegistro = $resultado[0]['fechaRegistro'];
// Almacenamos datos que usaremos en la respuesta
$respuesta = [
'exito' => 'Usuario validado.',
'nombreUsuario' => $resultado[0]['nombreUsuario']
];
return $respuesta;
}else{
// pass incorrecta
// Eliminamos los datos por si hubiera alguna sesión iniciado si alguien ha introducido mal la contraseña
unset($_SESSION['idUsuario']);
unset($_SESSION['nombreUsuario']);
unset($_SESSION['username']);
$this->idUsuario = null;
$this->username = null;
$this->nombreUsuario = null;
$this->email = null;
$this->avatar = null;
$this->fechaRegistro = null;
$respuesta = ['error' => 'Usuario o contrasena incorrectos.'];
return $respuesta;
}
}catch(PDOException $error){
$respuesta = [
'error' => 'Ocurrió un error al validar al usuario.',
'error_tecnico' => $error
];
$conexion = null;
return $respuesta;
}
} // Fin else
} // Fin validar()
public function editarNombre(){
$conexion = conexionBD();
if(is_array($conexion)){
return $conexion;
}else{
try{
$consulta = $conexion->prepare("UPDATE usuarios SET nombreUsuario=:nombre WHERE idUsuario=:id");
$consulta->bindParam(':id', $this->idUsuario);
$consulta->bindParam(':nombre', $this->nombreUsuario);
$consulta->execute();
$_SESSION['nombreUsuario'] = $this->nombreUsuario;
$respuesta = [
'exito' => 'El nombre de usuario se editó correctamente.',
'exito_tecnico' => $this->nombreUsuario
];
return $respuesta;
}catch(PDOException $error){
$respuesta = [
'error' => 'Ocurrió un error al editar el nombre del usuario.',
'error_tecnico' => $error
];
$conexion = null;
return $respuesta;
}
} // Fin else
} // Fin editarNombre()
public function editarAvatar(){
$conexion = conexionBD();
if(is_array($conexion)){
return $conexion;
}
try{
if(!isset($_FILES['avatar']) || !isset($_FILES['avatar']['error'])){
return [
'error' => 'No se recibió ninguna imagen.'
];
}
if($_FILES['avatar']['error'] !== UPLOAD_ERR_OK){
return [
'error' => 'No se pudo subir la imagen.'
];
}
if($_FILES['avatar']['size'] > 5 * 1024 * 1024){
return [
'error' => 'El avatar no puede superar los 5 MB.'
];
}
$finfo = new finfo(FILEINFO_MIME_TYPE);
$tiposPermitidos = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/webp' => 'webp'
];
$mime = $finfo->file(
$_FILES['avatar']['tmp_name']
);
if(!isset($tiposPermitidos[$mime])){
return [
'error' => 'El archivo debe ser una imagen JPG, PNG o WEBP.'
];
}
if(@getimagesize($_FILES['avatar']['tmp_name']) === false){
return [
'error' => 'El archivo seleccionado no es una imagen válida.'
];
}
// Creamos la carpeta física
$carpeta = $_SERVER['DOCUMENT_ROOT'].'/MyDiary/images/avatars/';
if(!is_dir($carpeta)){
if(!mkdir($carpeta, 0755, true)){
return [
'error' => 'No se pudo crear la carpeta de avatares.'
];
}
}
$extension = $tiposPermitidos[$mime];
$nombreArchivo = $this->idUsuario.'.'.$extension;
$rutaFisica = $carpeta.$nombreArchivo;
// Eliminamos posibles avatares anteriores de este usuario
$extensiones = ['jpg', 'png', 'webp'];
foreach($extensiones as $extensionAnterior){
$archivoAnterior = $carpeta.$this->idUsuario.'.'.$extensionAnterior;
if(file_exists($archivoAnterior) && $archivoAnterior !== $rutaFisica){
unlink($archivoAnterior);
}
}
if(!move_uploaded_file($_FILES['avatar']['tmp_name'],$rutaFisica)){
return [
'error' => 'No se pudo guardar el avatar.'
];
}
$rutaBD ='images/avatars/'.$nombreArchivo;
// Actualizamos el usuario
$consulta = $conexion->prepare("UPDATE usuarios SET avatar = :avatar WHERE idUsuario = :idUsuario");
$consulta->bindParam(':avatar', $rutaBD);
$consulta->bindParam(':idUsuario',$this->idUsuario);
$consulta->execute();
// Lo guardamos ya en la sesión actual
$_SESSION['avatar'] = $rutaBD;
return [
'exito' => true,
'avatar' => $rutaBD
];
}catch(PDOException $error){
return [
'error' => 'Ocurrió un error al actualizar el avatar.',
'error_tecnico' => $error
];
}
} // Fin editarAvatar()
public function cerrarSesion(){
$_SESSION = [];
session_destroy();
$respuesta = [
'exito' => 'La sesión se ha cerrado correctamente'
];
return $respuesta;
} // Fin cerrarSesion()
} // Fin de la clase Usuario
/*
$usuario = new Usuario();
$usuario->username = 'isaac';
$usuario->nombreUsuario = 'Isaac';
$usuario->email = 'isaac.espi@hotmail.es';
$usuario->contrasena = '1234';
$resultado = $usuario->insertar();
var_dump($resultado);
echo '<br>';
$resultado = $usuario->validar();
var_dump($resultado);
*/
?>