/** * 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')]); }
/** * 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. }
/** * Gestiona la visualización del formulario en caso de que se acceda a él por una llamada get * correspondiente al usuario entrando en el perfil por primera vez. * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function edit() { //Alimentamos la vista de forma básica, con todos los datos que necesitamos para volcar los //campos del perfil de usuario. return view('profile', ['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()]); }
/** * Create a new user instance after a valid registration. * * @param array $data * @return Usuario */ protected function create(array $data) { //Se sobreescribe la creación del registro nuevo con la función //existente en el modelo. return Usuario::crear($data); }