diff --git a/resources/js/pages/forms/Submissions.vue b/resources/js/pages/forms/submissions/Index.vue similarity index 99% rename from resources/js/pages/forms/Submissions.vue rename to resources/js/pages/forms/submissions/Index.vue index 043b0b6a210..71dcda38e12 100644 --- a/resources/js/pages/forms/Submissions.vue +++ b/resources/js/pages/forms/submissions/Index.vue @@ -8,7 +8,7 @@ import ResourceDeleter from '@/components/ResourceDeleter.vue'; import FormSubmissionListing from '@/components/forms/SubmissionListing.vue'; import Layout from '@/pages/layout/Layout.vue'; import PanelLayout from '@/pages/layout/PanelLayout.vue'; -import FormsLayout from './Layout.vue'; +import FormsLayout from '@/pages/forms/Layout.vue'; defineOptions({ layout: [Layout, PanelLayout, FormsLayout] }); diff --git a/resources/js/pages/forms/Submission.vue b/resources/js/pages/forms/submissions/Show.vue similarity index 100% rename from resources/js/pages/forms/Submission.vue rename to resources/js/pages/forms/submissions/Show.vue diff --git a/routes/cp.php b/routes/cp.php index 010ff625555..9469da9b92e 100644 --- a/routes/cp.php +++ b/routes/cp.php @@ -72,6 +72,7 @@ use Statamic\Http\Controllers\CP\Forms\FormLogicController; use Statamic\Http\Controllers\CP\Forms\FormsController; use Statamic\Http\Controllers\CP\Forms\FormSubmissionsController; +use Statamic\Http\Controllers\CP\Forms\GenerateFakeSubmissionController; use Statamic\Http\Controllers\CP\Forms\SubmissionActionController; use Statamic\Http\Controllers\CP\Globals\GlobalsBlueprintController; use Statamic\Http\Controllers\CP\Globals\GlobalsController; @@ -347,7 +348,7 @@ Route::post('forms/actions/list', [FormActionController::class, 'bulkActions'])->name('forms.actions.bulk'); Route::post('forms/{form}/submissions/actions', [SubmissionActionController::class, 'run'])->name('forms.submissions.actions.run'); Route::post('forms/{form}/submissions/actions/list', [SubmissionActionController::class, 'bulkActions'])->name('forms.submissions.actions.bulk'); - Route::post('forms/{form}/submissions/generate-fake', [FormSubmissionsController::class, 'generateFake'])->name('forms.submissions.generate-fake'); + Route::post('forms/{form}/submissions/generate-fake', GenerateFakeSubmissionController::class)->name('forms.submissions.generate-fake'); Route::resource('forms', FormsController::class); Route::get('forms/{form}/submissions', [FormSubmissionsController::class, 'index'])->name('forms.submissions.index'); Route::get('forms/{form}/submissions/{submission}', [FormSubmissionsController::class, 'show'])->name('forms.submissions.show'); diff --git a/src/Http/Controllers/CP/Forms/FormSubmissionsController.php b/src/Http/Controllers/CP/Forms/FormSubmissionsController.php index 321ed4730b5..5cf37133f99 100644 --- a/src/Http/Controllers/CP/Forms/FormSubmissionsController.php +++ b/src/Http/Controllers/CP/Forms/FormSubmissionsController.php @@ -2,14 +2,9 @@ namespace Statamic\Http\Controllers\CP\Forms; -use Illuminate\Http\Request; use Inertia\Inertia; use Statamic\CP\Column; -use Statamic\Events\FormSubmitted; use Statamic\Facades\Scope; -use Statamic\Facades\Site; -use Statamic\Forms\FakeSubmissionGenerator; -use Statamic\Forms\SendEmails; use Statamic\Http\Controllers\CP\CpController; use Statamic\Http\Controllers\CP\Forms\Concerns\ProvidesFormAbilities; use Statamic\Http\Controllers\CP\Forms\Concerns\QueriesFormSubmissionSearch; @@ -44,7 +39,7 @@ public function index(FilteredRequest $request, $form) $can = $this->formAbilities($form); - return Inertia::render('forms/Submissions', [ + return Inertia::render('forms/submissions/Index', [ 'form' => [ 'title' => __($form->title()), 'handle' => $form->handle(), @@ -107,17 +102,6 @@ protected function indexQuery($form) return $query; } - public function destroy($form, $id) - { - $submission = $form->submission($id); - - $this->authorize('delete', $submission); - - $submission->delete(); - - return response('', 204); - } - public function show($form, $submission) { if (! $submission = $form->submission($submission)) { @@ -129,7 +113,7 @@ public function show($form, $submission) $blueprint = $form->blueprint(); $fields = $blueprint->fields()->addValues($submission->data()->all())->preProcess(); - return Inertia::render('forms/Submission', [ + return Inertia::render('forms/submissions/Show', [ 'form' => $form, 'can' => $this->formAbilities($form), 'id' => $submission->id(), @@ -142,46 +126,14 @@ public function show($form, $submission) ]); } - public function generateFake(Request $request, $form, FakeSubmissionGenerator $generator) + public function destroy($form, $id) { - $this->authorize('generateFakeSubmissions', $form); - - if (! $form->get('generate_fake_submissions', true)) { - return response([ - 'message' => __('statamic::messages.form_fake_submission_generation_disabled'), - ], 403); - } - - $validated = $request->validate([ - 'mode' => ['required', 'in:cp_only,full_pipeline'], - ]); - - $values = $generator->generate($form); - $fields = $form->blueprint()->fields()->addValues($values); - $submission = $form->makeSubmission(); - $submission->data( - $fields->process()->values()->merge([ - '_fake' => true, - ]) - ); - - if ($validated['mode'] === 'full_pipeline') { - if (FormSubmitted::dispatch($submission) === false) { - return response([ - 'message' => __('statamic::messages.form_fake_submission_cancelled'), - ], 422); - } - } + $submission = $form->submission($id); - $submission->save(); + $this->authorize('delete', $submission); - if ($validated['mode'] === 'full_pipeline') { - SendEmails::dispatch($submission, Site::default()); - } + $submission->delete(); - return response([ - 'id' => $submission->id(), - 'message' => __('statamic::messages.form_fake_submission_generated'), - ]); + return response('', 204); } } diff --git a/src/Http/Controllers/CP/Forms/GenerateFakeSubmissionController.php b/src/Http/Controllers/CP/Forms/GenerateFakeSubmissionController.php new file mode 100644 index 00000000000..5e490fc3aa7 --- /dev/null +++ b/src/Http/Controllers/CP/Forms/GenerateFakeSubmissionController.php @@ -0,0 +1,58 @@ +authorize('generateFakeSubmissions', $form); + + if (! $form->get('generate_fake_submissions', true)) { + return response([ + 'message' => __('statamic::messages.form_fake_submission_generation_disabled'), + ], 403); + } + + $validated = $request->validate([ + 'mode' => ['required', 'in:cp_only,full_pipeline'], + ]); + + $values = $generator->generate($form); + $fields = $form->blueprint()->fields()->addValues($values); + $submission = $form->makeSubmission(); + $submission->data( + $fields->process()->values()->merge([ + '_fake' => true, + ]) + ); + + if ($validated['mode'] === 'full_pipeline') { + if (FormSubmitted::dispatch($submission) === false) { + return response([ + 'message' => __('statamic::messages.form_fake_submission_cancelled'), + ], 422); + } + } + + $submission->save(); + + if ($validated['mode'] === 'full_pipeline') { + SendEmails::dispatch($submission, Site::default()); + } + + return response([ + 'id' => $submission->id(), + 'message' => __('statamic::messages.form_fake_submission_generated'), + ]); + } +} diff --git a/tests/Feature/Forms/ViewSubmissionsListingTest.php b/tests/Feature/Forms/ViewSubmissionsListingTest.php index f6f486bd897..4392a4e7d73 100644 --- a/tests/Feature/Forms/ViewSubmissionsListingTest.php +++ b/tests/Feature/Forms/ViewSubmissionsListingTest.php @@ -33,7 +33,7 @@ public function it_shows_the_listing_with_the_view_form_submissions_permission() ->actingAs($user) ->get(cp_route('forms.submissions.index', $form->handle())) ->assertSuccessful() - ->assertInertia(fn ($page) => $page->component('forms/Submissions')); + ->assertInertia(fn ($page) => $page->component('forms/submissions/Index')); } #[Test] @@ -47,7 +47,7 @@ public function it_shows_the_listing_with_the_per_form_view_submissions_permissi ->actingAs($user) ->get(cp_route('forms.submissions.index', $form->handle())) ->assertSuccessful() - ->assertInertia(fn ($page) => $page->component('forms/Submissions')); + ->assertInertia(fn ($page) => $page->component('forms/submissions/Index')); } #[Test]