From 561bdab812df11c76213a80a6fd698d7cb6969e9 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Wed, 2 Sep 2026 17:56:46 +0100 Subject: [PATCH 1/2] scope submission counts on the forms index to the selected site Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01Qe1g6yd25kh7oTxtWfzB95 --- .../Controllers/CP/Forms/FormsController.php | 3 +- tests/Feature/Forms/ViewFormListingTest.php | 31 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/Http/Controllers/CP/Forms/FormsController.php b/src/Http/Controllers/CP/Forms/FormsController.php index 2880654919d..799b4357b2c 100644 --- a/src/Http/Controllers/CP/Forms/FormsController.php +++ b/src/Http/Controllers/CP/Forms/FormsController.php @@ -8,6 +8,7 @@ use Statamic\CP\Column; use Statamic\Facades\Blueprint; use Statamic\Facades\Form; +use Statamic\Facades\Site; use Statamic\Facades\User; use Statamic\Http\Controllers\CP\CpController; use Statamic\Http\Controllers\CP\Forms\Concerns\ProvidesFormAbilities; @@ -43,7 +44,7 @@ public function index(Request $request) 'id' => $form->handle(), 'title' => __($form->title()), 'status' => $form->status(), - 'submissions' => $canViewSubmissions ? $form->querySubmissions()->whereNull('partial')->count() : null, + 'submissions' => $canViewSubmissions ? $form->querySubmissions()->where('site', Site::selected())->whereNull('partial')->count() : null, 'show_url' => $form->showUrl(), 'submissions_url' => $form->submissionsUrl(), 'edit_url' => $form->editUrl(), diff --git a/tests/Feature/Forms/ViewFormListingTest.php b/tests/Feature/Forms/ViewFormListingTest.php index 79373efbb7f..bba2604366a 100644 --- a/tests/Feature/Forms/ViewFormListingTest.php +++ b/tests/Feature/Forms/ViewFormListingTest.php @@ -4,6 +4,7 @@ use PHPUnit\Framework\Attributes\Test; use Statamic\Facades\Form; +use Statamic\Facades\Site; use Statamic\Facades\User; use Tests\FakesRoles; use Tests\PreventSavingStacheItemsToDisk; @@ -166,6 +167,32 @@ public function it_includes_the_submission_count_when_the_user_can_view_submissi ); } + #[Test] + public function it_only_counts_submissions_in_the_selected_site() + { + $this->setSites([ + 'en' => ['url' => 'http://localhost/', 'locale' => 'en'], + 'fr' => ['url' => 'http://localhost/fr/', 'locale' => 'fr'], + ]); + Site::setSelected('fr'); + + $this->setTestRoles(['test' => ['access cp', 'view form submissions']]); + $user = tap(User::make()->assignRole('test'))->save(); + $form = tap(Form::make('test'))->save(); + $this->makeSubmission($form, 'en'); + $this->makeSubmission($form, 'en'); + $this->makeSubmission($form, 'fr'); + + $this + ->actingAs($user) + ->get(cp_route('forms.index')) + ->assertSuccessful() + ->assertInertia(fn ($page) => $page + ->component('forms/Index') + ->where('forms.0.submissions', 1) + ); + } + #[Test] public function it_excludes_the_submission_count_when_the_user_cannot_view_submissions() { @@ -187,9 +214,9 @@ public function it_excludes_the_submission_count_when_the_user_cannot_view_submi ); } - private function makeSubmission($form) + private function makeSubmission($form, $site = null) { - $submission = $form->makeSubmission(); + $submission = $form->makeSubmission()->site($site); $submission->data(['name' => 'John Doe']); $submission->save(); } From d3d5d992529f7589409eb1d6cab3a1c0ad88a482 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Wed, 2 Sep 2026 17:56:46 +0100 Subject: [PATCH 2/2] assign the selected site to generated fake submissions Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01Qe1g6yd25kh7oTxtWfzB95 --- .../GenerateFakeSubmissionController.php | 4 ++-- .../Forms/GenerateFakeSubmissionTest.php | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/Http/Controllers/CP/Forms/GenerateFakeSubmissionController.php b/src/Http/Controllers/CP/Forms/GenerateFakeSubmissionController.php index 5e490fc3aa7..5dea92ad4f0 100644 --- a/src/Http/Controllers/CP/Forms/GenerateFakeSubmissionController.php +++ b/src/Http/Controllers/CP/Forms/GenerateFakeSubmissionController.php @@ -29,7 +29,7 @@ public function __invoke(Request $request, $form, FakeSubmissionGenerator $gener $values = $generator->generate($form); $fields = $form->blueprint()->fields()->addValues($values); - $submission = $form->makeSubmission(); + $submission = $form->makeSubmission()->site(Site::selected()); $submission->data( $fields->process()->values()->merge([ '_fake' => true, @@ -47,7 +47,7 @@ public function __invoke(Request $request, $form, FakeSubmissionGenerator $gener $submission->save(); if ($validated['mode'] === 'full_pipeline') { - SendEmails::dispatch($submission, Site::default()); + SendEmails::dispatch($submission, $submission->site()); } return response([ diff --git a/tests/Feature/Forms/GenerateFakeSubmissionTest.php b/tests/Feature/Forms/GenerateFakeSubmissionTest.php index 1178b6e2158..d2a0249a921 100644 --- a/tests/Feature/Forms/GenerateFakeSubmissionTest.php +++ b/tests/Feature/Forms/GenerateFakeSubmissionTest.php @@ -8,6 +8,7 @@ use Statamic\Events\FormSubmitted; use Statamic\Facades\Blueprint; use Statamic\Facades\Form; +use Statamic\Facades\Site; use Statamic\Facades\User; use Statamic\Forms\SendEmails; use Tests\FakesRoles; @@ -73,6 +74,26 @@ public function users_with_view_submissions_permission_cannot_generate_a_fake_su $this->assertEquals(0, $form->querySubmissions()->count()); } + #[Test] + public function it_assigns_the_selected_site_to_the_fake_submission() + { + $this->setSites([ + 'en' => ['url' => 'http://localhost/', 'locale' => 'en'], + 'fr' => ['url' => 'http://localhost/fr/', 'locale' => 'fr'], + ]); + Site::setSelected('fr'); + + $form = $this->makeForm('contact'); + $user = $this->userWithConfigureFormsPermission(); + + $this + ->actingAs($user) + ->post(cp_route('forms.submissions.generate-fake', $form->handle()), ['mode' => 'cp_only']) + ->assertOk(); + + $this->assertEquals('fr', $form->querySubmissions()->first()->site()->handle()); + } + #[Test] public function cp_only_mode_does_not_dispatch_full_pipeline_side_effects() {