Skip to content

Commit 7279181

Browse files
authored
Merge pull request #253 from learnweb/fix/missing_passing_grade
Fix missing passing grade
2 parents 346b20f + 1f6e1bf commit 7279181

File tree

8 files changed

+79
-58
lines changed

8 files changed

+79
-58
lines changed

.github/workflows/config.json

Lines changed: 0 additions & 15 deletions
This file was deleted.

db/install.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<FIELD NAME="allownegativereputation" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
2525
<FIELD NAME="grademaxgrade" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
2626
<FIELD NAME="gradescalefactor" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
27+
<FIELD NAME="gradepass" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" COMMENT="grade needed to pass the grading"/>
2728
<FIELD NAME="gradecat" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
2829
<FIELD NAME="anonymous" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
2930
<FIELD NAME="needsreview" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>

db/upgrade.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,5 +314,17 @@ function xmldb_moodleoverflow_upgrade($oldversion) {
314314
upgrade_mod_savepoint(true, 2025031200, 'moodleoverflow');
315315
}
316316

317+
if ($oldversion < 2025112701) {
318+
// Define table moodleoverflow to be edited.
319+
$table = new xmldb_table('moodleoverflow');
320+
321+
// Create the field for the passing grade.
322+
$field = new xmldb_field('gradepass', XMLDB_TYPE_INTEGER, '10', null, null, null, 0, 'gradescalefactor');
323+
if (!$dbman->field_exists($table, $field)) {
324+
$dbman->add_field($table, $field);
325+
}
326+
327+
upgrade_mod_savepoint(true, 2025112701, 'moodleoverflow');
328+
}
317329
return true;
318330
}

lang/en/moodleoverflow.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@
165165
$string['give_a_reason'] = 'Give a reason (optional)';
166166
$string['gotoindex'] = 'Manage preferences';
167167
$string['grademaxgradeerror'] = 'Maximum grade must be a positive integer different than 0';
168+
$string['gradepasserror'] = 'Grade pass must be a positive integer';
169+
$string['gradepassvalidationerror'] = 'Grade pass can not be greater than the max grade';
168170
$string['gradesreport'] = 'Grades report';
169171
$string['gradesupdated'] = 'Grades updated';
170172
$string['helpamountofactivity'] = 'Help icon for activity';

lib.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ function moodleoverflow_can_create_attachment($moodleoverflow, $context) {
639639
}
640640

641641
/**
642-
* Obtain grades from plugin's database tab
642+
* Get the grades of a moodleoverflow instance for all users or a single user.
643643
*
644644
* @param stdClass $moodleoverflow moodleoverflow object
645645
* @param int $userid optional userid, 0 means all users.
@@ -652,8 +652,9 @@ function moodleoverflow_get_user_grades($moodleoverflow, $userid = 0) {
652652
$params = ["moodleoverflowid" => $moodleoverflow->id];
653653

654654
$sql = "SELECT u.id AS userid, g.grade AS rawgrade
655-
FROM {user} u, {moodleoverflow_grades} g
656-
WHERE u.id = g.userid AND g.moodleoverflowid = :moodleoverflowid";
655+
FROM {user} u
656+
JOIN {moodleoverflow_grades} g ON u.id = g.userid
657+
WHERE g.moodleoverflowid = :moodleoverflowid";
657658

658659
if ($userid) {
659660
$sql .= ' AND u.id = :userid ';

locallib.php

Lines changed: 23 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2176,49 +2176,35 @@ function moodleoverflow_count_discussions($moodleoverflow, $course) {
21762176
*
21772177
* @param object $moodleoverflow
21782178
* @param int $postuserrating
2179-
* @param object $postinguser
2180-
*
2179+
* @param int $postinguser
2180+
* @return void
21812181
*/
2182-
function moodleoverflow_update_user_grade($moodleoverflow, $postuserrating, $postinguser) {
2183-
2182+
function moodleoverflow_update_user_grade(object $moodleoverflow, int $postuserrating, int $postinguser): void {
2183+
global $DB;
21842184
// Check whether moodleoverflow object has the added params.
21852185
if ($moodleoverflow->grademaxgrade > 0 && $moodleoverflow->gradescalefactor > 0) {
2186-
moodleoverflow_update_user_grade_on_db($moodleoverflow, $postuserrating, $postinguser);
2187-
}
2188-
}
2186+
// Calculate the posting user's updated grade.
2187+
$grade = $postuserrating / $moodleoverflow->gradescalefactor;
21892188

2190-
/**
2191-
* Updates user grade in database.
2192-
*
2193-
* @param object $moodleoverflow
2194-
* @param int $postuserrating
2195-
* @param int $userid
2196-
*
2197-
*/
2198-
function moodleoverflow_update_user_grade_on_db($moodleoverflow, $postuserrating, $userid) {
2199-
global $DB;
2200-
2201-
// Calculate the posting user's updated grade.
2202-
$grade = $postuserrating / $moodleoverflow->gradescalefactor;
2189+
if ($grade > $moodleoverflow->grademaxgrade) {
2190+
$grade = $moodleoverflow->grademaxgrade;
2191+
}
22032192

2204-
if ($grade > $moodleoverflow->grademaxgrade) {
2205-
$grade = $moodleoverflow->grademaxgrade;
2206-
}
2193+
// Save updated grade on local table.
2194+
if ($DB->record_exists('moodleoverflow_grades', ['userid' => $postinguser, 'moodleoverflowid' => $moodleoverflow->id])) {
2195+
$DB->set_field('moodleoverflow_grades', 'grade', $grade, ['userid' => $postinguser,
2196+
'moodleoverflowid' => $moodleoverflow->id, ]);
2197+
} else {
2198+
$gradedataobject = new stdClass();
2199+
$gradedataobject->moodleoverflowid = $moodleoverflow->id;
2200+
$gradedataobject->userid = $postinguser;
2201+
$gradedataobject->grade = $grade;
2202+
$DB->insert_record('moodleoverflow_grades', $gradedataobject, false);
2203+
}
22072204

2208-
// Save updated grade on local table.
2209-
if ($DB->record_exists('moodleoverflow_grades', ['userid' => $userid, 'moodleoverflowid' => $moodleoverflow->id])) {
2210-
$DB->set_field('moodleoverflow_grades', 'grade', $grade, ['userid' => $userid,
2211-
'moodleoverflowid' => $moodleoverflow->id, ]);
2212-
} else {
2213-
$gradedataobject = new stdClass();
2214-
$gradedataobject->moodleoverflowid = $moodleoverflow->id;
2215-
$gradedataobject->userid = $userid;
2216-
$gradedataobject->grade = $grade;
2217-
$DB->insert_record('moodleoverflow_grades', $gradedataobject, false);
2205+
// Update gradebook.
2206+
moodleoverflow_update_grades($moodleoverflow, $postinguser);
22182207
}
2219-
2220-
// Update gradebook.
2221-
moodleoverflow_update_grades($moodleoverflow, $userid);
22222208
}
22232209

22242210
/**
@@ -2257,7 +2243,7 @@ function moodleoverflow_update_all_grades_for_cm($moodleoverflowid) {
22572243
$userrating = ratings::moodleoverflow_get_reputation($moodleoverflow->id, $userid, true);
22582244

22592245
// Calculate the posting user's updated grade.
2260-
moodleoverflow_update_user_grade_on_db($moodleoverflow, $userrating, $userid);
2246+
moodleoverflow_update_user_grade($moodleoverflow, $userrating, $userid);
22612247
}
22622248
}
22632249
}

mod_form.php

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,29 @@ public function definition() {
175175

176176
$mform->addElement('text', 'grademaxgrade', get_string('modgrademaxgrade', 'grades'));
177177
$mform->setType('grademaxgrade', PARAM_INT);
178-
$mform->addRule('grademaxgrade', get_string('grademaxgradeerror', 'moodleoverflow'), 'regex', '/^[0-9]+$/', 'client');
178+
$mform->addRule(
179+
'grademaxgrade',
180+
get_string('grademaxgradeerror', 'moodleoverflow'),
181+
'regex',
182+
'/^(0|[1-9][0-9]*)$/',
183+
'client'
184+
);
179185

180186
$mform->addElement('text', 'gradescalefactor', get_string('scalefactor', 'moodleoverflow'));
181187
$mform->addHelpButton('gradescalefactor', 'scalefactor', 'moodleoverflow');
182188
$mform->setType('gradescalefactor', PARAM_INT);
183-
$mform->addRule('gradescalefactor', get_string('scalefactorerror', 'moodleoverflow'), 'regex', '/^[0-9]+$/', 'client');
189+
$mform->addRule(
190+
'gradescalefactor',
191+
get_string('scalefactorerror', 'moodleoverflow'),
192+
'regex',
193+
'/^(0|[1-9][0-9]*)$/',
194+
'client'
195+
);
196+
197+
$mform->addElement('text', 'gradepass', get_string('gradepass', 'grades'));
198+
$mform->addHelpButton('gradepass', 'gradepass', 'grades');
199+
$mform->setType('gradepass', PARAM_INT);
200+
$mform->addRule('gradepass', get_string('gradepasserror', 'moodleoverflow'), 'regex', '/^(0|[1-9][0-9]*)$/', 'client');
184201

185202
if ($this->_features->gradecat) {
186203
$mform->addElement(
@@ -299,6 +316,18 @@ public function data_postprocessing($data) {
299316
}
300317
}
301318

319+
/**
320+
* Handles data preprocessing.
321+
* @param array $defaultvalues
322+
* @return void
323+
*/
324+
public function data_preprocessing(&$defaultvalues) {
325+
parent::data_preprocessing($defaultvalues);
326+
if (isset($defaultvalues['gradepass'])) {
327+
$defaultvalues['gradepass'] = (int)$defaultvalues['gradepass'];
328+
}
329+
}
330+
302331
/**
303332
* Validates set data in mod_form
304333
* @param array $data
@@ -309,6 +338,11 @@ public function data_postprocessing($data) {
309338
public function validation($data, $files): array {
310339
$errors = parent::validation($data, $files);
311340

341+
// Validate the grade settings.
342+
if (isset($data['gradepass']) && isset($data['grademaxgrade']) && $data['gradepass'] > $data['grademaxgrade']) {
343+
$errors['gradepass'] = get_string('gradepassvalidationerror', 'moodleoverflow');
344+
}
345+
312346
// Validate that the limited answer settings.
313347
$currenttime = time();
314348
$isstarttime = !empty($data['la_starttime']);

version.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
defined('MOODLE_INTERNAL') || die();
2828

29-
$plugin->version = 2025112700;
29+
$plugin->version = 2025112701;
3030
$plugin->requires = 2024100700.00; // Require Moodle 4.5.
3131
$plugin->supported = [405, 501];
3232
$plugin->component = 'mod_moodleoverflow';

0 commit comments

Comments
 (0)