From 69ec3c00a93a9e495f22c312aadd67d1bbcd0dd6 Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 4 Aug 2026 14:52:07 +0300 Subject: [PATCH 1/6] fix: adjsut the slider help and values accomadting unlimited and zero revisions --- backend/db/models/assignment.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/db/models/assignment.js b/backend/db/models/assignment.js index c11a01e7d..16855415c 100644 --- a/backend/db/models/assignment.js +++ b/backend/db/models/assignment.js @@ -32,16 +32,16 @@ module.exports = (sequelize, DataTypes) => { label: "Maximum Revisions:", type: "slider", class: "custom-slider-class", - min: 1, + min: 0, max: 20, step: 1, unit: "revision(s)", unlimitedAtMax: true, unlimitedLabel: "unlimited", - unlimitedStoredValue: 0, + unlimitedStoredValue: 100, required: true, default: 1, - help: "Maximum number of allowed revision copies for this assignment. Move to the end for unlimited.", + help: "Maximum number of allowed resubmissions after the original submission (e.g. 1 revision = original + 1 resubmission = 2 submissions total). Move to the end for unlimited.", }, { key: "start", From b2501fa766ff8a0f397468a0b1d8a38371aaa52d Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 4 Aug 2026 14:53:06 +0300 Subject: [PATCH 2/6] refcactor: improve the max reached error message --- backend/webserver/sockets/document.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/webserver/sockets/document.js b/backend/webserver/sockets/document.js index 42270d47b..14adfb650 100644 --- a/backend/webserver/sockets/document.js +++ b/backend/webserver/sockets/document.js @@ -1167,7 +1167,7 @@ class DocumentSocket extends Socket { if (chainDepth >= assignment.maxRevisions) { throw new Error( - `Maximum revisions reached for this assignment (${chainDepth}/${assignment.maxRevisions})` + `Maximum revisions reached for this assignment submission` ); } } From 256821449c08b75723ad12ec78e7311a1b70f198 Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 4 Aug 2026 14:53:34 +0300 Subject: [PATCH 3/6] fix: Fix parent studyId on copying of assignment --- .../src/components/dashboard/assignments/AssignmentModal.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/dashboard/assignments/AssignmentModal.vue b/frontend/src/components/dashboard/assignments/AssignmentModal.vue index abc352a52..4dab05fb7 100644 --- a/frontend/src/components/dashboard/assignments/AssignmentModal.vue +++ b/frontend/src/components/dashboard/assignments/AssignmentModal.vue @@ -205,6 +205,7 @@ export default { delete this.formData.id; this.formData.userId = this.currentUserId; this.formData.closed = null; + this.formData.parentAssignmentId = assignmentId; } this.$refs.stepperModal.open(); From ee893c7e571d2a40006b0021d25927f4175fa9a5 Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 4 Aug 2026 16:23:46 +0300 Subject: [PATCH 4/6] refactor: set unlimited to -1 and accomadate changes --- backend/db/models/assignment.js | 2 +- backend/webserver/sockets/document.js | 6 +++--- frontend/src/components/dashboard/Assignments.vue | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/db/models/assignment.js b/backend/db/models/assignment.js index 16855415c..55798067d 100644 --- a/backend/db/models/assignment.js +++ b/backend/db/models/assignment.js @@ -38,7 +38,7 @@ module.exports = (sequelize, DataTypes) => { unit: "revision(s)", unlimitedAtMax: true, unlimitedLabel: "unlimited", - unlimitedStoredValue: 100, + unlimitedStoredValue: -1, required: true, default: 1, help: "Maximum number of allowed resubmissions after the original submission (e.g. 1 revision = original + 1 resubmission = 2 submissions total). Move to the end for unlimited.", diff --git a/backend/webserver/sockets/document.js b/backend/webserver/sockets/document.js index 14adfb650..1cf0118c4 100644 --- a/backend/webserver/sockets/document.js +++ b/backend/webserver/sockets/document.js @@ -896,8 +896,8 @@ class DocumentSocket extends Socket { transaction, }); - // Check revision limit (0 = unlimited) - if (assignment && assignment.maxRevisions > 0 && assignmentSubmissions.length >= assignment.maxRevisions) { + // Check revision limit (-1 = unlimited) + if (assignment && assignment.maxRevisions !== -1 && assignmentSubmissions.length >= assignment.maxRevisions) { throw new Error(`Revision limit reached: user ${submission.userId} already has ${assignmentSubmissions.length} submission(s) for this assignment (max: ${assignment.maxRevisions}).`); } @@ -1154,7 +1154,7 @@ class DocumentSocket extends Socket { previousSubmissionId = chainTails.sort((a, b) => b - a)[0]; } - if (assignment.maxRevisions !== null && assignment.maxRevisions !== undefined && previousSubmissionId) { + if (assignment.maxRevisions !== null && assignment.maxRevisions !== undefined && assignment.maxRevisions !== -1 && previousSubmissionId) { let chainDepth = 0; let currentId = previousSubmissionId; const visited = new Set(); diff --git a/frontend/src/components/dashboard/Assignments.vue b/frontend/src/components/dashboard/Assignments.vue index 854e26222..298a91a83 100644 --- a/frontend/src/components/dashboard/Assignments.vue +++ b/frontend/src/components/dashboard/Assignments.vue @@ -273,7 +273,7 @@ export default { canCloseAssignment: (this.isAssignmentOwner(assignment) || this.canEditAssignments) && !assignment.closed, submissionStatus: this.getSubmissionStatus(assignment), assignedRoles, - maxRevisions: assignment.maxRevisions ?? 1, + maxRevisions: assignment.maxRevisions === -1 ? "∞" : (assignment.maxRevisions ?? 1), disable: assignment.disable, start: assignment.start ? new Date(assignment.start).toLocaleString() : "-", end: assignment.end ? new Date(assignment.end).toLocaleString() : "-", From c696eae5483f8bd0993a17564b9300dbbe42f302 Mon Sep 17 00:00:00 2001 From: karimouf Date: Wed, 5 Aug 2026 14:34:17 +0300 Subject: [PATCH 5/6] refactor: add badges to assignment submissions overview --- .../src/components/dashboard/Submissions.vue | 103 ++++++++++++++---- 1 file changed, 79 insertions(+), 24 deletions(-) diff --git a/frontend/src/components/dashboard/Submissions.vue b/frontend/src/components/dashboard/Submissions.vue index cb78618bb..01f6d4fe7 100644 --- a/frontend/src/components/dashboard/Submissions.vue +++ b/frontend/src/components/dashboard/Submissions.vue @@ -20,23 +20,33 @@ collapsed > -
@@ -61,15 +71,24 @@ collapsable collapsed > -