/** * Gestiona la visualización de la vista correspondiente a la petición post * tras haber modificado el perfil de usuario. * * @return $this|\Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View */ public function index() { $ok = null; //COMPROBAR SI SE HA SOLICITADO LA BAJA ANTES DE HACER NADA MÁS: //============================================================== //En caso de que el usuario haya marcado el check de eliminar perfil //redirigiremos a la url que gestionará la baja de este usuario. if (\Input::has('eliminar')) { //Lo primero es destruir el usuario logado. $baja = Usuario::destroy(auth()->user()->cod_usuario); //Redirigimos el flujo del programa a la url prevista para llevar al usuario //directamente a la página de bienvenida, con un pequeño mensaje indicando que su //perfil ha sido eliminado, ya que a partir de este instante solo podrá //acceder a las url permitidas para invitados: $ok = redirect('/baja/' . $baja); } else { //Volcamos los datos del request en una variable: $request = \Request::instance(); //Validamos el formulario en servidor, con el validador previsto en el modelo: $validacion = Usuario::validarModificacion($request); if ($validacion->fails()) { //Si la validación falla, comunicamos devolveremos la ristra de errores para que la vista los //interprete y vizualice en su lugar. $ok = redirect()->back()->withInput()->withErrors($validacion->errors()); } elseif (Usuario::modificar($request, auth()->user()->cod_usuario)) { //Se añade el registro de la tabla usuarios, para poder refrescarlo de forma correcta en la vista. Si no lo //hacemos así, los campos del perfil de usuarios, no se actualizan en la sesión tras el update en todos los casos, solo //si no modificamos los productos ofrecidos. Este bug se ha resuelto completamente con esta técnica, ya que no // se recupera ningún dato del usuario de sesión, salvo el código, el esto procede de la base de datos recién //actualizada. $ok = view('profile', ['exito' => true, 'categoria' => Categoria::all(), 'subcategoria' => Subcategoria::all(), 'producto' => Producto::all(), 'usuario' => Usuario::where('cod_usuario', auth()->user()->cod_usuario)->first(), 'compartido' => Usuario_producto::where('usuario', auth()->user()->cod_usuario)->get()]); } else { //Si ha habido algún otro error (por ejemplo, de acceso a base de datos), alimentamos la vista de forma //que se muestre un mensaje genérico de que la operación no se ha completado de forma exitosa: $ok = view('profile', ['exito' => false, 'categoria' => Categoria::all(), 'subcategoria' => Subcategoria::all(), 'producto' => Producto::all(), 'usuario' => Usuario::where('cod_usuario', auth()->user()->cod_usuario)->first(), 'compartido' => Usuario_producto::where('usuario', auth()->user()->cod_usuario)->get()]); } } //Retornamos la variable $ok, que guarda la alimentación para la vista, independientemente del resultado. return $ok; }
/** * Gestiona la baja del registro del id y tabla pasados por parámetro y realimenta * la vista con el mensaje de éxito/error correspondiente. * * @param $tabla * @param $id * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function destroy($tabla, $id) { //Mismo algoritmo que en altas y modificaciones: // - Diferentes cases para cada modelo. // - Guardamos el resultado en un flag // - Retornamos la vista con variables que la realimentan // y le dicen a si mostrar el mensaje de éxito // o un error. $borrado = null; switch ($tabla) { case 'categorias': $borrado = Categoria::destroy($id); break; case 'peticiones': $borrado = Peticion::destroy($id); break; case 'productos': $borrado = Producto::destroy($id); break; case 'subcategorias': $borrado = Subcategoria::destroy($id); break; case 'usuarios': $borrado = Usuario::destroy($id); break; case 'usuarios_productos': $borrado = Usuario_producto::destroy($id); } $resultados = DB::table($tabla)->get(); $campos = DB::getSchemaBuilder()->getColumnListing($tabla); return view('cpanel', ['exito' => $borrado, 'editar' => false, 'nuevo' => false, 'tabla' => $tabla, 'id' => '', 'campos' => $campos, 'resultados' => $resultados, 'tablas' => DB::select('SHOW TABLES'), 'ddbb' => 'Tables_in_' . env('DB_DATABASE')]); }