/** * Método de inserción que recoge las variables de $_POST * @return [type] [description] */ public static function insert() { // Primero tenemos que preparar un bloque try catch $errores = []; if ($_POST) { // Validamos todas las variables de $_POST $_POST = Validaciones::sanearEntrada($_POST); // empezamos la transacción $conn = Database::getInstance()->getDatabase(); $conn->beginTransaction(); if (($error = PersonaModel::insert()) && !is_array($error)) { // Comprobaos los campos requeridos en la tabla if (isset($_POST["nick"]) && isset($_POST["pass1"]) && isset($_POST["pass2"]) && isset($_POST["categoria"])) { // Si cualquiera de los campos requeridos // Diese un error deberemos lanzar un rollback // validar Nick if (isset($_POST["nick"])) { if (($err = Validaciones::validarNick($_POST["nick"])) === true) { // comprobamos que dicho nick exista en la base de datos // Sino lanzamos un error try { $conn = Database::getInstance()->getDatabase(); $ssql = "SELECT * FROM usuario WHERE nick = :nick"; $prepare = $conn->prepare($ssql); $prepare->bindParam(":nick", $_POST["nick"], PDO::PARAM_STR); $prepare->execute(); if ($prepare->rowCount() === 1) { // si existe la preparo $errores["nick"][] = "El nick ya existe"; } else { $campos[":nick"] = $_POST["nick"]; // creamos la carpeta personal del usuario $ruta = shell_exec('pwd'); $ruta = trim($ruta); $ruta .= "/" . $_POST['nick']; if (Validaciones::crearDir($carpeta = $ruta)) { $campos[":carpeta"] = $carpeta; } } } catch (PDOException $e) { return $errores['generic'][] = "Error en la base de datos"; } } else { $errores["nick"][] = $err; } } // Validar contraseña if (isset($_POST["pass1"]) && isset($_POST["pass1"])) { if (($err = Validaciones::validarPassAlta($_POST["pass1"], $_POST["pass2"])) !== true) { $errores["pass"] = $err; } else { $campos[":pass"] = HelperFunctions::encriptarPasswd($_POST["pass1"]); } } else { $errores["pass"][] = "Una de las contraseñas o ambas no han sido introducidas"; } if (isset($_POST["categoria"])) { // Validar la categoría // En el formulario es un campo select // el cual tiene como value el valor de la BD // de forma que aqui solo hay que validar el id de la categria if (($err = CategoriaModel::getCategoriaByNombre($_POST["categoria"])) !== true) { $errores["categoria"][] = "La categoría no existe"; } else { $aux = CategoriaModel::getCategoriaId($_POST["categoria"]); $campos[":categoria"] = $aux[0]['id']; } // fin de las comprobaciones de categoria } else { $errores["categoria"][] = "La categoría no existe"; } // Si hay errores los retornamos if ($errores) { $conn->rollback(); return Validaciones::resultado($errores); } else { // Insertamos todos los valores // Montamos las consultas $fields = ""; $values = ""; // $values = " :campo1 :campo2 ..." // $fields = "campo1, campo2," foreach ($campos as $indice => $valor) { $values .= " " . $indice . ","; $aux = mb_substr($indice, 1); $fields .= $aux . ","; } // le añado el id $fields .= " id"; $values .= " :id"; $campos[":id"] = $error; // Si ha entrado aqui, $error es el id. $ssql = "INSERT INTO usuario({$fields}) VALUES ({$values})"; $query = $conn->prepare($ssql); /*foreach ($campos as $indice => $valor) { if ($indice == ":categoria") { $query->bindParam($indice, $valor,PDO::PARAM_INT); } else { $query->bindParam($indice, $valor,PDO::PARAM_STR); } }*/ $query->execute($campos); $conn->commit(); return true; } } else { // puesto que no tratamos de insertar // solamente personas sino que tenemos que insertar usuarios // que puedan logearse, si los campos del usuario no existen // directamente se hace un rollback $conn->rollback(); $errores['generic'][] = "No se han recivido los datos minimos requeridos"; } } elseif ($error === false) { $errores['generic'][] = "El usuario no se a insertado correctamente"; // Si no se puede insertar el usuario hacemos un rollback $conn->rollback(); } else { // Almacenamos los errores los errores $errores[] = $error; $conn->rollback(); return Validaciones::resultado($errores); } } else { $errores['generic'][] = "No se han recivido datos"; return Validaciones::resultado($errores); } }
/** * Método que valida los datos a insertar en la base de datos * @param Array $array Datos a validar * @return Boolean True = si los datos son validos, False = sino lo son */ public static function validar($array) { // Si exite el campo lo validamos // Validación del nombre if (isset($array['nombre'])) { if (($erro = Validaciones::validarNombre($array["nombre"])) !== true) { Session::addArray('feedback_negative', $erro); } } else { Session::add('feedback_negative', 'El nombre no ha sido recicibido'); } // fin de las validaciones del nombre // Validación del apellido if (isset($array['apellido'])) { if (($erro = Validaciones::validarApellidos($array["apellido"])) !== true) { Session::addArray('feedback_negative', $erro); } } else { Session::add('feedback_negative', 'Los apellidos no han sido recicibido'); } // fin de las validaciones del apellido // Validación del email if (isset($array['email'])) { if (($erro = Validaciones::validarEmail($array["email"])) !== true) { Session::addArray('feedback_negative', $erro); } else { // comprobamos que el email no existe en la base de datos if (UsuarioModel::getEmail($array["email"])) { Session::add('feedback_negative', 'El email ya exite'); } } } else { Session::add('feedback_negative', 'El email no ha sido recicibido'); } // Fin de la validación del email //validación de las contraseñas if (isset($array['clave'])) { if (isset($array['claveRe'])) { // lógica de las validaciones if (($erro = Validaciones::validarPassAlta($array["clave"], $array['claveRe'])) !== true) { Session::addArray('feedback_negative', $erro); } } else { Session::add('feedback_negative', 'La clave repetida no se se ha recibido'); } } else { Session::add('feedback_negative', 'La clave no se se ha recibido'); } // fin de la validación de las contraseñas // Comprobación de de que no haya habido errores return Session::comprobarErrores(); }