Skip to content

Commit d1c6101

Browse files
author
lafricain79
committed
feat: add maximum submissions limit for forms
Add the ability to limit the number of responses a form can receive. When the limit is reached, the form is automatically closed and displays a dedicated message instead of accepting new submissions. - Add max_submissions column to forms_v2_forms table (migration) - Add maxSubmissions property to Form entity - Check submission limit in FormsService::canSubmit() - Add limit enforcement in ApiController::newSubmission() - Add isMaxSubmissionsReached flag in form API response - Add limit settings UI in SettingsSidebarTab - Display dedicated 'Form is full' message in Submit view - Add French translations for new strings Closes #596 Signed-off-by: lafricain79 <lafricain79@gmail.com> Update src/components/SidebarTabs/SettingsSidebarTab.vue Co-authored-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: L'Africain <fr.cyrille@tiberiade.be> Signed-off-by: lafricain79 <lafricain79@gmail.com> Update src/components/SidebarTabs/SettingsSidebarTab.vue Co-authored-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: L'Africain <fr.cyrille@tiberiade.be> Signed-off-by: lafricain79 <lafricain79@gmail.com> Update src/views/Submit.vue Co-authored-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: L'Africain <fr.cyrille@tiberiade.be> Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: revert manual changes to l10n files Signed-off-by: lafricain79 <lafricain79@gmail.com> refactor: move schema change to a new migration file Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: treat zero and null as unlimited for max submissions Signed-off-by: lafricain79 <lafricain79@gmail.com> refactor: remove default value and custom CSS for max submissions input Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: set default value to 1 when enabling max submissions Signed-off-by: lafricain79 <lafricain79@gmail.com> refactor: use NcInputField instead of native input for max submissions Signed-off-by: lafricain79 <lafricain79@gmail.com> Update lib/Migration/Version050300Date20260303000000.php Co-authored-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: L'Africain <fr.cyrille@tiberiade.be> Signed-off-by: lafricain79 <lafricain79@gmail.com> Update lib/Service/FormsService.php Co-authored-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: L'Africain <fr.cyrille@tiberiade.be> Signed-off-by: lafricain79 <lafricain79@gmail.com> Update lib/Controller/ApiController.php Co-authored-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: L'Africain <fr.cyrille@tiberiade.be> Signed-off-by: lafricain79 <lafricain79@gmail.com> Update lib/Controller/ApiController.php Co-authored-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: L'Africain <fr.cyrille@tiberiade.be> Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: add maxSubmissions and isMaxSubmissionsReached to FormsForm psalm type Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: fix ESLint formatting issues Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: fix PHP CS formatting in migration file Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: update unit tests to include maxSubmissions and isMaxSubmissionsReached fields Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: fix remaining ESLint errors Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: update FormsMigratorTest to include maxSubmissions field Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: require explicit intent for option creation (IME safe) Signed-off-by: don9x2E <revan@kakao.com> fix: Improve validation for submission answers with strict type checking Signed-off-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: lafricain79 <lafricain79@gmail.com> Chore(deps): Bump immutable from 5.1.4 to 5.1.5 Bumps [immutable](https://github.com/immutable-js/immutable-js) from 5.1.4 to 5.1.5. - [Release notes](https://github.com/immutable-js/immutable-js/releases) - [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md) - [Commits](immutable-js/immutable-js@v5.1.4...v5.1.5) --- updated-dependencies: - dependency-name: immutable dependency-version: 5.1.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> chore: Support NC34 Signed-off-by: nfebe <fenn25.fn@gmail.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> Chore(deps): Bump dompurify from 3.3.1 to 3.3.2 Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.3.1 to 3.3.2. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](cure53/DOMPurify@3.3.1...3.3.2) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.3.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> v5.2.5 changelog Signed-off-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: lafricain79 <lafricain79@gmail.com> Chore(deps): Bump actions/setup-node from 6.2.0 to 6.3.0 Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.2.0 to 6.3.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](actions/setup-node@6044e13...53b8394) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> Chore(deps-dev): Bump @vue/tsconfig from 0.5.1 to 0.9.0 Bumps [@vue/tsconfig](https://github.com/vuejs/tsconfig) from 0.5.1 to 0.9.0. - [Release notes](https://github.com/vuejs/tsconfig/releases) - [Commits](vuejs/tsconfig@v0.5.1...v0.9.0) --- updated-dependencies: - dependency-name: "@vue/tsconfig" dependency-version: 0.9.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> Chore(deps): Bump phpoffice/phpspreadsheet from 5.4.0 to 5.5.0 Bumps [phpoffice/phpspreadsheet](https://github.com/PHPOffice/PhpSpreadsheet) from 5.4.0 to 5.5.0. - [Release notes](https://github.com/PHPOffice/PhpSpreadsheet/releases) - [Changelog](https://github.com/PHPOffice/PhpSpreadsheet/blob/master/CHANGELOG.md) - [Commits](PHPOffice/PhpSpreadsheet@5.4.0...5.5.0) --- updated-dependencies: - dependency-name: phpoffice/phpspreadsheet dependency-version: 5.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot <bot@nextcloud.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot <bot@nextcloud.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot <bot@nextcloud.com> Signed-off-by: lafricain79 <lafricain79@gmail.com> Revert "Chore(deps-dev): Bump @vue/tsconfig from 0.5.1 to 0.9.0" This reverts commit cf200d1. Signed-off-by: lafricain79 <lafricain79@gmail.com> fix(a11y): Prevent escaping of aria-labels in QuestionLong and QuestionShort components Signed-off-by: Christian Hartmann <chris-hartmann@gmx.de> Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: update integration tests to include maxSubmissions and isMaxSubmissionsReached fields Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: regenerate openapi.json Signed-off-by: lafricain79 <lafricain79@gmail.com> fix: resolve merge conflict in AnswerInput.vue Signed-off-by: lafricain79 <lafricain79@gmail.com>
1 parent b68b1b6 commit d1c6101

32 files changed

Lines changed: 359 additions & 50 deletions

.github/workflows/appstore-build-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
7272
# Skip if no package.json
7373
if: ${{ steps.versions.outputs.nodeVersion }}
74-
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
74+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
7575
with:
7676
node-version: ${{ steps.versions.outputs.nodeVersion }}
7777

.github/workflows/lint-eslint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
fallbackNpm: '^11.3'
6969

7070
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
71-
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
71+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
7272
with:
7373
node-version: ${{ steps.versions.outputs.nodeVersion }}
7474

.github/workflows/node-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ jobs:
7272
fallbackNpm: '^11.3'
7373

7474
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
75-
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
75+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
7676
with:
7777
node-version: ${{ steps.versions.outputs.nodeVersion }}
7878

.github/workflows/openapi.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262

6363
- name: Set up node ${{ steps.node_versions.outputs.nodeVersion }}
6464
if: ${{ steps.node_versions.outputs.nodeVersion }}
65-
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
65+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
6666
with:
6767
node-version: ${{ steps.node_versions.outputs.nodeVersion }}
6868

.github/workflows/playwright.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
fallbackNpm: '^10'
3737

3838
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
39-
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
39+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
4040
with:
4141
node-version: ${{ steps.versions.outputs.nodeVersion }}
4242

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@
55

66
# Changelog
77

8+
## v5.2.5 - 2026-03-05
9+
10+
[Full Changelog](https://github.com/nextcloud/forms/compare/v5.2.4...v5.2.5)
11+
12+
### Fixed
13+
14+
- fix: Improve validation for submission answers with strict type checking by @Chartman123 in [\#3178](https://github.com/nextcloud/forms/pull/3178)
15+
- Fix delete form confirmation by @don9x2E in [\#3188](https://github.com/nextcloud/forms/pull/3188)
16+
- fix: clone shared form and set default values by @Chartman123 in [\#3187](https://github.com/nextcloud/forms/pull/3187)
17+
- Fix IME composition handling in option inputs by @don9x2E in [\#3183](https://github.com/nextcloud/forms/pull/3183)
18+
- Follow up IME option creation by @don9x2E in [\#3185](https://github.com/nextcloud/forms/pull/3185)
19+
- fix: use abolute URL for form by @Chartman123 in [\#3181](https://github.com/nextcloud/forms/pull/3181)
20+
21+
### Merged
22+
23+
- refactor: migrate to `@nextcloud/dialogs` v7 by @susnux in [\#3191](https://github.com/nextcloud/forms/pull/3191)
24+
825
## v5.2.4 - 2026-01-23
926

1027
[Full Changelog](https://github.com/nextcloud/forms/compare/v5.2.3...v5.2.4)

appinfo/info.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
<screenshot>https://raw.githubusercontent.com/nextcloud/forms/main/screenshots/forms3.png</screenshot>
6161

6262
<dependencies>
63-
<nextcloud min-version="31" max-version="33" />
63+
<nextcloud min-version="31" max-version="34" />
6464
</dependencies>
6565

6666
<background-jobs>

composer.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

l10n/it.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,13 @@ OC.L10N.register(
8383
"Go to last page" : "Vai all'ultima pagina",
8484
"QR code representation of {text}" : "Rappresentazione del codice QR di {text}",
8585
"Add a new column" : "Aggiungi una nuova colonna",
86+
"Add a new row" : "Aggiungi una nuova riga",
8687
"Add a new answer option" : "Aggiungi una nuova opzione di risposta",
88+
"The text of column {index}" : "Il testo della colonna {index}",
89+
"The text of row {index}" : "Il testo della riga {index}",
8790
"The text of option {index}" : "Il testo dell'opzione {index}",
91+
"Column number {index}" : "Numero colonna {index}",
92+
"Row number {index}" : "Numero riga {index}",
8893
"Answer number {index}" : "Risposta numero {index}",
8994
"Error while saving the answer" : "Errore durante il salvataggio della risposta",
9095
"Move option actions" : "Sposta le azioni delle opzioni",
@@ -121,6 +126,7 @@ OC.L10N.register(
121126
"Delete" : "Elimina",
122127
"Uploading …" : "Caricamento in corso …",
123128
"Add new file as answer" : "Aggiungi nuovo file come risposta",
129+
"Radio" : "Radio",
124130
"Checkbox" : "Casella di selezione",
125131
"Number" : "Numero",
126132
"Text" : "Testo",
@@ -226,6 +232,7 @@ OC.L10N.register(
226232
"Form title" : "Titolo del modulo",
227233
"Description" : "Descrizione",
228234
"Add a question" : "Aggiungi una domanda",
235+
"Grid" : "Griglia",
229236
"Summary" : "Riepilogo",
230237
"Responses" : "Risposte",
231238
"Unlink spreadsheet" : "Scollega foglio di calcolo",
@@ -306,6 +313,8 @@ OC.L10N.register(
306313
"Pick an option" : "Scegli un'opzione",
307314
"File" : "File",
308315
"File question title" : "Titolo della domanda del file",
316+
"Grid question title" : "Titolo della domanda a griglia",
317+
"People can submit a grid answer" : "Le persone possono inviare una risposta nella griglia",
309318
"Short answer" : "Risposta breve",
310319
"Short answer question title" : "Titolo della domanda con risposta breve",
311320
"People can enter a short answer" : "Le persone possono digitare una breve risposta",

l10n/it.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,13 @@
8181
"Go to last page" : "Vai all'ultima pagina",
8282
"QR code representation of {text}" : "Rappresentazione del codice QR di {text}",
8383
"Add a new column" : "Aggiungi una nuova colonna",
84+
"Add a new row" : "Aggiungi una nuova riga",
8485
"Add a new answer option" : "Aggiungi una nuova opzione di risposta",
86+
"The text of column {index}" : "Il testo della colonna {index}",
87+
"The text of row {index}" : "Il testo della riga {index}",
8588
"The text of option {index}" : "Il testo dell'opzione {index}",
89+
"Column number {index}" : "Numero colonna {index}",
90+
"Row number {index}" : "Numero riga {index}",
8691
"Answer number {index}" : "Risposta numero {index}",
8792
"Error while saving the answer" : "Errore durante il salvataggio della risposta",
8893
"Move option actions" : "Sposta le azioni delle opzioni",
@@ -119,6 +124,7 @@
119124
"Delete" : "Elimina",
120125
"Uploading …" : "Caricamento in corso …",
121126
"Add new file as answer" : "Aggiungi nuovo file come risposta",
127+
"Radio" : "Radio",
122128
"Checkbox" : "Casella di selezione",
123129
"Number" : "Numero",
124130
"Text" : "Testo",
@@ -224,6 +230,7 @@
224230
"Form title" : "Titolo del modulo",
225231
"Description" : "Descrizione",
226232
"Add a question" : "Aggiungi una domanda",
233+
"Grid" : "Griglia",
227234
"Summary" : "Riepilogo",
228235
"Responses" : "Risposte",
229236
"Unlink spreadsheet" : "Scollega foglio di calcolo",
@@ -304,6 +311,8 @@
304311
"Pick an option" : "Scegli un'opzione",
305312
"File" : "File",
306313
"File question title" : "Titolo della domanda del file",
314+
"Grid question title" : "Titolo della domanda a griglia",
315+
"People can submit a grid answer" : "Le persone possono inviare una risposta nella griglia",
307316
"Short answer" : "Risposta breve",
308317
"Short answer question title" : "Titolo della domanda con risposta breve",
309318
"People can enter a short answer" : "Le persone possono digitare una breve risposta",

0 commit comments

Comments
 (0)