/** * Método que modifica un registro ya existente a partir de los datos del request pasados * por post desde el formulario y el id del usuario que modifica su perfil. * * @param $request * @param $id * @return bool */ public static function modificar($request, $id) { //Buscamos y volcamos los datos del usuario logado para modificarlos: $usuario = Usuario::find($id); //Vamos sobreescribiendo en esta instancia todos los campos con los procedentes // del request: $usuario->nombre_usuario = $request->nombre_usuario; //La password puede modificarse o no. En caso de que el usuario ay tecleado una //password nueva, la encriptamos y la guardamos en la instancia, en caso de //que el usuario no teclee nada, no se actualiza este campo en el save. if (isset($request->password) && $request->password != '') { $usuario->password = bcrypt($request->password); } //Grabamos en la instancia el resto de los datos: $usuario->localizacion = $request->localizacion; $usuario->latitud = $request->latitud; $usuario->longitud = $request->longitud; $usuario->email = $request->email; $usuario->telefono = $request->telefono; $usuario->movil = $request->movil; $usuario->whatsapp = $request->whatsapp ? 1 : 0; $usuario->geolocalizacion = $request->geolocalizacion ? 1 : 0; //Trasladamos el contenido de la instancia usuario a su registro en la base de datos //con ayuda del método save() heredado de Model. $ok = $usuario->save(); //En caso de existir productos compartidos previos, comprobamos si se han borrado o no, y //los mantenemos, modificamos o borramos, según el valos del campo $producto. //La clave a buscar en la tabla, nos hemos encargado de alimentarla desde la vista //con el campo $clave if (isset($request->productoCompartido)) { foreach ($request->productoCompartido as $clave => $producto) { if ($producto != 'Producto') { //Si el valor del campo es diferente a Producto, cogemos el índice correspondiente y //modificamos ese mismo registro a lo que haya puesto de nuevo el usuario. Usuario_producto::modificar($usuario->cod_usuario, Usuario_producto::getCodProducto($producto), $clave); } else { //Si se ha eliminado el producto compartido de la vista, debe contener 'Producto' en el //valor del campo, con lo que borramos el registro correspondiente a ese id: Usuario_producto::borrarPorId($clave); } } } //Los productos nuevos que se quieran compartir, se habrán recibido en el campo producto, //en un array con tantas posiciones como artículos nuevos se hayan añadido: if (isset($request->producto)) { foreach ($request->producto as $producto) { //Siguiendo el mismo algoritmo de altas, por cada producto nuevo a compartir, creamos //un registro en la tabla Usuario_producto: if ($producto != 'Producto' && !Usuario_producto::buscar($usuario->cod_usuario, $producto)) { Usuario_producto::crear($usuario->cod_usuario, $producto); } } } //Nota: Podría contemplarse un rollback para el caso de que nos e pudiera completar el //grabado de productos, pero al estar el formulario abierto para grabar 1, varios o ningún //producto compartido, es comlpicado determinar en qué cirsunscancias sería necesario //establecer la necesidad de un rollback. return $ok; //Devolvemos el resultado de la modificación. }
/** * Método para borrar todos los registro de la tabla Usuarios_productos que * tengan un usuario y producto cncreto. en caso de existir más de uno, se * borrarían todos. * * @param $cod_usuario * @param $nombre_producto * @return mixed */ public static function borrar($cod_usuario, $nombre_producto) { $codProducto = Usuario_producto::getCodProducto($nombre_producto); return DB::table('usuarios_productos')->where('usuario', '=', $cod_usuario)->where('producto', '=', $codProducto)->delete(); }