/** * Graba el registro nuevo alojado en el request en la tabla pasada por parámetro, * y alimenta la vista de forma que devuelva los mensajes de error/éxito procedentes. * * @param $tabla * @return $this|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function store($tabla) { //Recuperamos el contenido del request del formulario correspondiente //al nuevo registro: $request = \Request::instance(); //Reiniciamos los diferentes flags y variables que necesitamos para valorar la situación //final de la operación: $ok = null; $grabado = null; $validacion = null; //Dependiendo de la tabla de la que se trate, necesitamos llamar a unas //validaciones y métodos de modelos diferentes: switch ($tabla) { case 'categorias': //Las validaciones de categoría, petición, subcategorías y usuarios_productos //son bastante básicas, nos limitamos a validar y grabar con los métodos ya //previstos en el modelo: $validacion = Categoria::validar($request); if (!$validacion->fails()) { $grabado = Categoria::crear(['nombre_categoria' => $request->nombre_categoria]); } break; case 'peticiones': $validacion = Peticion::validar($request); if (!$validacion->fails()) { $grabado = Peticion::alta($request, $request->usuario); } break; case 'productos': //Para productos tenemos más campos, pero la simplicidad es similar: $validacion = Producto::validar($request); if (!$validacion->fails()) { $grabado = Producto::crear(['subcategoria' => $request->subcategoria, 'nombre_producto' => $request->nombre_producto, 'descripcion' => $request->descripcion, 'foto_producto' => $request->foto_producto, 'link_articulo' => $request->link_articulo]); } break; case 'subcategorias': $validacion = Subcategoria::validar($request); if (!$validacion->fails()) { $grabado = Subcategoria::crear(['nombre_subcategoria' => $request->nombre_subcategoria, 'categoria' => $request->categoria]); } break; case 'usuarios': //En el caso de usuarios debemos transformar primero los campos de checkbox en datos binarios //que podamos alojar en la tabla prevista: $validacion = Usuario::validarAdmin($request); if (!$validacion->fails()) { $data['acepto'] = isset($request->acepto) && $request->acepto ? 1 : null; $data['whatsapp'] = isset($request->whatsapp) && $request->whatsapp ? 1 : 0; $data['geolocalizacion'] = isset($request->geolocalizacion) && $request->geolocalizacion ? 1 : 0; $grabado = Usuario::create(['nombre_usuario' => $request->nombre_usuario, 'password' => bcrypt($request->password), 'localizacion' => $request->localizacion, 'latitud' => $request->latitud, 'longitud' => $request->longitud, 'email' => $request->email, 'telefono' => $request->telefono, 'movil' => $request->movil, 'whatsapp' => $data['whatsapp'], 'geolocalizacion' => $data['geolocalizacion'], 'acepto' => $data['acepto']]); } break; case 'usuarios_productos': $validacion = Usuario_producto::validar($request); if (!$validacion->fails()) { $grabado = Usuario_producto::create(['usuario' => $request->usuario, 'producto' => $request->producto]); } } //Alimentamos el resto de la vista que no tiene que ver con la grabación //del resistro: $resultados = DB::table($tabla)->get(); $campos = DB::getSchemaBuilder()->getColumnListing($tabla); //En caso de grabación correcta, inicializamos las variables y flags que //alimentan la vista, de forma que se le pueda transmitir un mensaje de //Éxito al usuario: if ($grabado) { $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 no, hemos de guardar el resultado con los errores en la variable //prevista para ello: $ok = redirect()->back()->withInput()->withErrors($validacion->errors()); } else { //En caso de que haya fallado la grabación en base de datos, se le pasa //a la vista la combinación para que muestr un mensaje de error específico. $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; }
/** * Almacena la petición en la tabla Peticiones usando el método del modelo Peticion. * * @param Request $request * @param $id * @return \Illuminate\Http\Response * @internal param array $data */ public function store(Request $request, $id) { return Peticion::alta($request, $id); }