From ce3474042b2756ec978a63197820d7632728a0cb Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Tue, 7 Jul 2026 12:55:06 +0100 Subject: [PATCH 1/8] wip --- lang/en/messages.php | 6 + .../components/forms/FormStatusIndicator.vue | 33 ++ resources/js/pages/forms/Builder.vue | 5 +- resources/js/pages/forms/Connect.vue | 5 +- resources/js/pages/forms/Index.vue | 6 +- resources/js/pages/forms/Logic.vue | 5 +- resources/js/pages/forms/Submissions.vue | 8 +- src/Contracts/Forms/Form.php | 14 + src/Forms/AugmentedForm.php | 2 +- src/Forms/Form.php | 22 ++ src/Forms/Restrictions.php | 82 +++++ src/Forms/Tags.php | 5 + src/GraphQL/Types/FormType.php | 3 + .../CP/Forms/FormSubmissionsController.php | 1 + .../Controllers/CP/Forms/FormsController.php | 54 ++++ src/Http/Controllers/FormController.php | 4 + tests/Feature/Forms/UpdateFormTest.php | 22 ++ tests/Forms/RestrictionsTest.php | 293 ++++++++++++++++++ 18 files changed, 561 insertions(+), 9 deletions(-) create mode 100644 resources/js/components/forms/FormStatusIndicator.vue create mode 100644 src/Forms/Restrictions.php create mode 100644 tests/Forms/RestrictionsTest.php diff --git a/lang/en/messages.php b/lang/en/messages.php index 612380ebd1f..a5c7a06e082 100644 --- a/lang/en/messages.php +++ b/lang/en/messages.php @@ -139,6 +139,12 @@ 'form_configure_generate_fake_submissions_instructions' => 'Allow generating fake submissions and workflow testing from the submissions screen.', 'form_configure_store_instructions' => 'Disable to stop storing submissions. Events and email notifications will still be sent.', 'form_configure_title_instructions' => 'Use a call to action, such as \'Contact Us\'.', + 'form_configure_close_date_instructions' => 'The form will stop accepting submissions after this date. Leave blank to never close.', + 'form_configure_submission_limit_instructions' => 'The maximum number of submissions to accept. Leave blank for no limit.', + 'form_configure_submission_limit_period_instructions' => 'How often the submission limit resets.', + 'form_configure_closed_message_instructions' => 'Shown when the form is isClosed or the submission limit has been reached. Leave blank to use the default message.', + 'form_configure_require_login_instructions' => 'Only allow logged in users to submit this form.', + 'form_configure_require_login_message_instructions' => 'Shown when a logged out visitor tries to submit the form. Leave blank to use the default message.', 'form_create_description' => 'Get started by creating your first form.', 'form_builder' => 'Form Builder', 'form_export_filtered_description' => 'Exports submissions with current filters and visible columns.', diff --git a/resources/js/components/forms/FormStatusIndicator.vue b/resources/js/components/forms/FormStatusIndicator.vue new file mode 100644 index 00000000000..3382713999b --- /dev/null +++ b/resources/js/components/forms/FormStatusIndicator.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/pages/forms/Builder.vue b/resources/js/pages/forms/Builder.vue index 902a7ad7d1d..a9c96706f36 100644 --- a/resources/js/pages/forms/Builder.vue +++ b/resources/js/pages/forms/Builder.vue @@ -20,7 +20,8 @@ export const [injectBuilderContext, provideBuilderContext] = createContext('Form