diff --git a/app/Http/Controllers/Forms/FormSubmissionController.php b/app/Http/Controllers/Forms/FormSubmissionController.php index 2eec417..1c4e007 100644 --- a/app/Http/Controllers/Forms/FormSubmissionController.php +++ b/app/Http/Controllers/Forms/FormSubmissionController.php @@ -6,7 +6,11 @@ use App\Http\Controllers\Controller; use App\Http\Resources\FormSubmissionResource; use App\Models\Forms\Form; use App\Exports\FormSubmissionExport; +use App\Http\Requests\AnswerFormRequest; +use App\Jobs\Form\StoreFormSubmissionJob; +use App\Models\Forms\FormSubmission; use App\Service\Forms\FormSubmissionFormatter; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Maatwebsite\Excel\Facades\Excel; @@ -27,6 +31,20 @@ class FormSubmissionController extends Controller return FormSubmissionResource::collection($form->submissions()->paginate(100)); } + public function update(AnswerFormRequest $request, $id, $submissionId) + { + $form = $request->form; + $this->authorize('update', $form); + $job = new StoreFormSubmissionJob($request->form, $request->validated()); + $job->setSubmissionId($submissionId)->handle(); + + $data = new FormSubmissionResource(FormSubmission::findOrFail($submissionId)); + return $this->success([ + 'message' => 'Record successfully updated.', + 'data' => $data + ]); + } + public function export(string $id) { $form = Form::findOrFail((int) $id); diff --git a/app/Http/Middleware/Form/ResolveFormMiddleware.php b/app/Http/Middleware/Form/ResolveFormMiddleware.php new file mode 100644 index 0000000..b2a6875 --- /dev/null +++ b/app/Http/Middleware/Form/ResolveFormMiddleware.php @@ -0,0 +1,26 @@ +route($routeParamName))->firstOrFail(); + $request->merge([ + 'form' => $form, + ]); + return $next($request); + } +} diff --git a/app/Jobs/Form/StoreFormSubmissionJob.php b/app/Jobs/Form/StoreFormSubmissionJob.php index 198bb2c..871ba9a 100644 --- a/app/Jobs/Form/StoreFormSubmissionJob.php +++ b/app/Jobs/Form/StoreFormSubmissionJob.php @@ -56,6 +56,12 @@ class StoreFormSubmissionJob implements ShouldQueue return $this->submissionId; } + public function setSubmissionId(int $id) + { + $this->submissionId = $id; + return $this; + } + private function storeSubmission(array $formData) { // Create or update record @@ -76,6 +82,9 @@ class StoreFormSubmissionJob implements ShouldQueue */ private function submissionToUpdate(): ?FormSubmission { + if($this->submissionId){ + return $this->form->submissions()->findOrFail($this->submissionId); + } if ($this->form->editable_submissions && isset($this->submissionData['submission_id']) && $this->submissionData['submission_id']) { $submissionId = $this->submissionData['submission_id'] ? Hashids::decode($this->submissionData['submission_id']) : false; $submissionId = $submissionId[0] ?? null; diff --git a/client/components/forms/SelectInput.vue b/client/components/forms/SelectInput.vue index 521f83e..e5cf34a 100644 --- a/client/components/forms/SelectInput.vue +++ b/client/components/forms/SelectInput.vue @@ -5,7 +5,6 @@ -