/**
  * Visualiza la página tras la grabación de la petición y vuelca los
  * mansajes de error en caso de que existan.
  *
  * @return \Illuminate\Http\Response
  */
 public function index()
 {
     //Variable para retornar los datos resultantes de la gestión del formulario
     $resultado = null;
     //Volcamos los datos del formulario en una variable y usamos el validador de la
     //clase para validar los datos.
     $request = \Request::instance();
     $validacion = Peticion::validar($request);
     if ($validacion->fails()) {
         //Comunicación de errores en caso de que no esté correcto el formulario
         $resultado = redirect()->back()->withInput()->withErrors($validacion->errors());
     } elseif ($this->store($request, auth()->user()->cod_usuario)) {
         //Si la validación es buena, y la grabación se realiza bien, enviamos un correo al
         //administrador del sitio como aviso de que tiene unapetición nueva.
         $asunto = 'Nuevo mensaje de usuario Giftfinder';
         $mensaje = '<br/>Email usuario: ' . $request->email_respuesta . '<br/>Asunto: ' . $request->asunto . '<br/>Mensaje: ' . $request->mensaje;
         //Si no indicamos esta cabecera, no inerpretará el código html y no saldrán
         //los acentos ni las ñ correctamente:
         $cabecera = 'Content-type: text/html; charset=utf-8';
         //En vez de rociodemula@demosdata.com, se podría enviar a un buzón especifico del
         //sitio, o al correo de todos los administradores de la tabla Usuarios.
         $correo = mail('*****@*****.**', $asunto, $mensaje, $cabecera);
         //Devolvemos el resultado de éxito y el resultado del envío de correo a la vista.
         $resultado = view('contact', ['exito' => true, 'correo' => $correo]);
     } else {
         //Si ha fallado la grabación en la tabla Peticiones, preparamos el resultado para
         //que la vista lance el mensaje de error.
         $resultado = view('contact', ['exito' => false, 'correo' => false]);
     }
     return $resultado;
     //El resultado se devuelve de igual forma.
 }
 /**
  * Alimenta la vista tras haber pulsado el botón para grabar un registro ya
  * existente modificándolo.
  *
  * @return $this|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
  */
 public function update()
 {
     //Recuperamos el contenido del request:
     $request = \Request::instance();
     //Guardamos los datos importantes del request en variables independientes
     //para que sean más manejables:
     $id = $request->get('id');
     $tabla = $request->get('tabla');
     //Inicializamos algunos flag y variables necesarias:
     $grabado = null;
     $validacion = null;
     $ok = null;
     //Al igual que en altas, según la tabla, cambiará el procedimiento, y nos iremos
     //a los métodos específicos de cada modelo, algunos, diseñados para esta opción de
     //panel de administración, ya que es diferente del formulario genérico de usuario:
     switch ($tabla) {
         case 'categorias':
             $validacion = Categoria::validar($request);
             if (!$validacion->fails()) {
                 $grabado = Categoria::modificar($request, $id);
             }
             break;
         case 'peticiones':
             $validacion = Peticion::validar($request);
             if (!$validacion->fails()) {
                 $grabado = Peticion::modificar($request, $id);
             }
             break;
         case 'productos':
             $validacion = Producto::validar($request);
             if (!$validacion->fails()) {
                 $grabado = Producto::modificar($request, $id);
             }
             break;
         case 'subcategorias':
             $validacion = Subcategoria::validar($request);
             if (!$validacion->fails()) {
                 $grabado = Subcategoria::modificar($request, $id);
             }
             break;
         case 'usuarios':
             $validacion = Usuario::validarAdmin($request);
             if (!$validacion->fails()) {
                 $grabado = Usuario::modificarAdmin($request, $id);
             }
             break;
         case 'usuarios_productos':
             $validacion = Usuario_producto::validar($request);
             if (!$validacion->fails()) {
                 $grabado = Usuario_producto::modificarAdmin($request, $id);
             }
     }
     //Recargamos los datos para alimentar los combos y cabeceras de la vista:
     $resultados = DB::table($tabla)->get();
     $campos = DB::getSchemaBuilder()->getColumnListing($tabla);
     if ($grabado) {
         //Si se ha grabado, devolveremos la vista sin errores:
         $ok = view('cpanel', ['exito' => true, 'editar' => false, 'nuevo' => false, 'tabla' => $tabla, 'id' => '', 'campos' => $campos, 'resultados' => $resultados, 'tablas' => DB::select('SHOW TABLES'), 'ddbb' => 'Tables_in_' . env('DB_DATABASE')]);
     } else {
         if ($validacion->fails()) {
             //Si ha fallado la validación pasaremos los errores de validación:
             $ok = redirect()->back()->withInput()->withErrors($validacion->errors());
         } else {
             //La única opción que nos queda es qeu haya pasado la validación pero nos
             //falle la grabación en base de datos, con lo que preparamos la alimentación
             //de la vista para un error genérico:
             $ok = view('cpanel', ['exito' => false, 'editar' => false, 'nuevo' => false, 'tabla' => $tabla, 'id' => '', 'campos' => $campos, 'resultados' => $resultados, 'tablas' => DB::select('SHOW TABLES'), 'ddbb' => 'Tables_in_' . env('DB_DATABASE')]);
         }
     }
     return $ok;
 }