Ejemplo n.º 1
0
 /**
  * Método que crea un registro nuevo en la tabla Usuarios. En caso de que el usuario haya
  * definido algun producto a compartir, se graba también en la tqabla Usuarios_productos.
  *
  * @param $data
  * @return static
  */
 public static function crear($data)
 {
     //Los 3 campos del formulario que consisten en un check, tenemos que adaptarlo para
     //grabarlos en la base de datos con tipo de dato binario, 1 para los que tengan valor
     //'on' en el formulario, 0 para los que no.
     $data['acepto'] = isset($data['acepto']) && $data['acepto'] == 'on' ? 1 : 0;
     $data['whatsapp'] = isset($data['whatsapp']) && $data['whatsapp'] == 'on' ? 1 : 0;
     $data['geolocalizacion'] = isset($data['geolocalizacion']) && $data['geolocalizacion'] == 'on' ? 1 : 0;
     //Creamos el usuario con ayuda del método create de Model, pasando como parámetros
     //todos los datos contenidos en el array recibido como parámetro:
     $usuario = Usuario::create(['nombre_usuario' => $data['nombre_usuario'], 'password' => bcrypt($data['password']), 'localizacion' => $data['localizacion'], 'latitud' => $data['latitud'], 'longitud' => $data['longitud'], 'email' => $data['email'], 'telefono' => $data['telefono'], 'movil' => $data['movil'], 'whatsapp' => $data['whatsapp'], 'geolocalizacion' => $data['geolocalizacion'], 'acepto' => $data['acepto']]);
     //En caso de que exista algún producto entre los datos recogidos, tenemos que grabar
     //un registro en Usuarios_registros por cada producto compartido:
     if (isset($data['producto'])) {
         foreach ($data['producto'] as $producto) {
             //Usamos la variable almacenada en $usuario para relacionar el producto con
             //el usuario que lo comparte:
             if ($producto != 'Producto' && !Usuario_producto::buscar($usuario->cod_usuario, $producto)) {
                 //Solo grabamos el producto compartido en caso de que no exista ya, son eso
                 //evitamos repetir productos compartidos en caso de que el usuario los
                 //duplique en el formulario.
                 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.
     //Retornamos la instancia de Usuario creada, como es normal en el método create.
     return $usuario;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }