From 96dc595add8b454842f0b4087ab491bba2608f60 Mon Sep 17 00:00:00 2001
From: Angel Fernando Quiroz Campos <1697880+AngelFQC@users.noreply.github.com>
Date: Fri, 12 Jun 2026 17:37:20 -0500
Subject: [PATCH 1/4] Gradebook: Add customizable grading modes and forum
participation scoring - refs BT#23462
---
.../gradebook/CalculationModeSelector.vue | 69 +++++++
.../gradebook/ForumParticipationItemForm.vue | 120 ++++++++++++
assets/vue/services/gradebookService.js | 63 ++++++
public/main/gradebook/gradebook_add_cat.php | 4 +
public/main/gradebook/gradebook_add_link.php | 5 +
public/main/gradebook/gradebook_edit_cat.php | 4 +
public/main/gradebook/gradebook_edit_link.php | 5 +
.../gradebook/lib/be/abstractlink.class.php | 33 ++++
.../main/gradebook/lib/be/category.class.php | 36 +++-
.../lib/be/forumparticipationlink.class.php | 183 ++++++++++++++++++
.../gradebook/lib/be/linkfactory.class.php | 3 +
.../main/gradebook/lib/fe/catform.class.php | 14 ++
.../lib/fe/linkaddeditform.class.php | 30 +++
public/main/inc/lib/api.lib.php | 1 +
src/CoreBundle/Entity/GradebookCategory.php | 24 ++-
src/CoreBundle/Entity/GradebookLink.php | 77 ++++++++
.../Enums/GradebookCalculationMode.php | 24 +++
.../Schema/V200/Version20260612120000.php | 45 +++++
18 files changed, 733 insertions(+), 7 deletions(-)
create mode 100644 assets/vue/components/gradebook/CalculationModeSelector.vue
create mode 100644 assets/vue/components/gradebook/ForumParticipationItemForm.vue
create mode 100644 public/main/gradebook/lib/be/forumparticipationlink.class.php
create mode 100644 src/CoreBundle/Enums/GradebookCalculationMode.php
create mode 100644 src/CoreBundle/Migrations/Schema/V200/Version20260612120000.php
diff --git a/assets/vue/components/gradebook/CalculationModeSelector.vue b/assets/vue/components/gradebook/CalculationModeSelector.vue
new file mode 100644
index 00000000000..4bb33dceabe
--- /dev/null
+++ b/assets/vue/components/gradebook/CalculationModeSelector.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+ {{ helpText }}
+
+
+
+
+
diff --git a/assets/vue/components/gradebook/ForumParticipationItemForm.vue b/assets/vue/components/gradebook/ForumParticipationItemForm.vue
new file mode 100644
index 00000000000..b7dbced675e
--- /dev/null
+++ b/assets/vue/components/gradebook/ForumParticipationItemForm.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
diff --git a/assets/vue/services/gradebookService.js b/assets/vue/services/gradebookService.js
index 81746870ce7..1c79095928e 100644
--- a/assets/vue/services/gradebookService.js
+++ b/assets/vue/services/gradebookService.js
@@ -39,4 +39,67 @@ export default {
async getDefaultCertificate(courseId) {
return await baseService.get(`${API_BASE}/default_certificate/${courseId}`)
},
+
+ /**
+ * Updates the calculation mode (weighted_average | points_sum) of a gradebook category.
+ * @param {number|string} categoryId The numeric id of the gradebook category.
+ * @param {string} calculationMode The target calculation mode.
+ * @returns {Promise