Example #1
0
 /**
  * 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.
 }