diff --git a/app/Member/Actions/ExportAction.php b/app/Member/Actions/ExportAction.php index b6b9389e..357884fb 100644 --- a/app/Member/Actions/ExportAction.php +++ b/app/Member/Actions/ExportAction.php @@ -43,7 +43,7 @@ class ExportAction public function asController(ActionRequest $request): StreamedResponse { - $members = FilterScope::fromRequest($request->input('filter'))->getQuery()->get(); + $members = FilterScope::fromRequest($request->input('filter'))->withOptions(['hitsPerPage' => 20000])->getQuery()->get(); $contents = $this->handle($members); Storage::disk('temp')->put('mitglieder.csv', $contents); diff --git a/app/Member/FilterScope.php b/app/Member/FilterScope.php index 5a1e893e..6e97ceea 100644 --- a/app/Member/FilterScope.php +++ b/app/Member/FilterScope.php @@ -20,6 +20,12 @@ use Spatie\LaravelData\Mappers\SnakeCaseMapper; #[MapOutputName(SnakeCaseMapper::class)] class FilterScope extends ScoutFilter { + + /** + * @var array + */ + public array $options = []; + /** * @param array $activityIds * @param array $subactivityIds @@ -43,6 +49,16 @@ class FilterScope extends ScoutFilter ) { } + /** + * @param array $options + */ + public function withOptions(array $options): self + { + $this->options = $options; + + return $this; + } + public function getQuery(): Builder { $this->search = $this->search ?: ''; @@ -97,7 +113,7 @@ class FilterScope extends ScoutFilter $options['filter'] = $this->implode(collect([$andFilter])->push($this->inExpression('id', $this->include)), 'OR'); $options['sort'] = ['lastname:asc', 'firstname:asc']; - return $engine->search($query, $options); + return $engine->search($query, [...$this->options, ...$options]); }); } diff --git a/tests/EndToEnd/Member/ExportCsvActionTest.php b/tests/EndToEnd/Member/ExportCsvActionTest.php index 2e01e92e..3f4711fc 100644 --- a/tests/EndToEnd/Member/ExportCsvActionTest.php +++ b/tests/EndToEnd/Member/ExportCsvActionTest.php @@ -27,6 +27,19 @@ class ExportCsvActionTest extends EndToEndTestCase $this->assertFalse(str_contains($contents, 'Max')); } + public function testItExportsAllMembers(): void + { + Storage::fake('temp'); + + $this->withoutExceptionHandling()->login()->loginNami(); + Member::factory()->defaults()->count(40)->create(); + + sleep(1); + $this->callFilter('member-export', [])->assertDownload('mitglieder.csv'); + $contents = Storage::disk('temp')->get('mitglieder.csv'); + $this->assertCount(42, explode("\n", $contents)); + } + public function testItOrdersByLastname(): void { Storage::fake('temp');