Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions .github/workflows/config.json

This file was deleted.

1 change: 1 addition & 0 deletions db/install.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<FIELD NAME="allownegativereputation" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="grademaxgrade" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="gradescalefactor" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="gradepass" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" COMMENT="grade needed to pass the grading"/>
<FIELD NAME="gradecat" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="anonymous" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="needsreview" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
Expand Down
12 changes: 12 additions & 0 deletions db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -314,5 +314,17 @@ function xmldb_moodleoverflow_upgrade($oldversion) {
upgrade_mod_savepoint(true, 2025031200, 'moodleoverflow');
}

if ($oldversion < 2025112701) {
// Define table moodleoverflow to be edited.
$table = new xmldb_table('moodleoverflow');

// Create the field for the passing grade.
$field = new xmldb_field('gradepass', XMLDB_TYPE_INTEGER, '10', null, null, null, 0, 'gradescalefactor');
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}

upgrade_mod_savepoint(true, 2025112701, 'moodleoverflow');
}
return true;
}
2 changes: 2 additions & 0 deletions lang/en/moodleoverflow.php
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,8 @@
$string['give_a_reason'] = 'Give a reason (optional)';
$string['gotoindex'] = 'Manage preferences';
$string['grademaxgradeerror'] = 'Maximum grade must be a positive integer different than 0';
$string['gradepasserror'] = 'Grade pass must be a positive integer';
$string['gradepassvalidationerror'] = 'Grade pass can not be greater than the max grade';
$string['gradesreport'] = 'Grades report';
$string['gradesupdated'] = 'Grades updated';
$string['helpamountofactivity'] = 'Help icon for activity';
Expand Down
7 changes: 4 additions & 3 deletions lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -639,7 +639,7 @@ function moodleoverflow_can_create_attachment($moodleoverflow, $context) {
}

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

$sql = "SELECT u.id AS userid, g.grade AS rawgrade
FROM {user} u, {moodleoverflow_grades} g
WHERE u.id = g.userid AND g.moodleoverflowid = :moodleoverflowid";
FROM {user} u
JOIN {moodleoverflow_grades} g ON u.id = g.userid
WHERE g.moodleoverflowid = :moodleoverflowid";

if ($userid) {
$sql .= ' AND u.id = :userid ';
Expand Down
60 changes: 23 additions & 37 deletions locallib.php
Original file line number Diff line number Diff line change
Expand Up @@ -2176,49 +2176,35 @@ function moodleoverflow_count_discussions($moodleoverflow, $course) {
*
* @param object $moodleoverflow
* @param int $postuserrating
* @param object $postinguser
*
* @param int $postinguser
* @return void
*/
function moodleoverflow_update_user_grade($moodleoverflow, $postuserrating, $postinguser) {

function moodleoverflow_update_user_grade(object $moodleoverflow, int $postuserrating, int $postinguser): void {
global $DB;
// Check whether moodleoverflow object has the added params.
if ($moodleoverflow->grademaxgrade > 0 && $moodleoverflow->gradescalefactor > 0) {
moodleoverflow_update_user_grade_on_db($moodleoverflow, $postuserrating, $postinguser);
}
}
// Calculate the posting user's updated grade.
$grade = $postuserrating / $moodleoverflow->gradescalefactor;

/**
* Updates user grade in database.
*
* @param object $moodleoverflow
* @param int $postuserrating
* @param int $userid
*
*/
function moodleoverflow_update_user_grade_on_db($moodleoverflow, $postuserrating, $userid) {
global $DB;

// Calculate the posting user's updated grade.
$grade = $postuserrating / $moodleoverflow->gradescalefactor;
if ($grade > $moodleoverflow->grademaxgrade) {
$grade = $moodleoverflow->grademaxgrade;
}

if ($grade > $moodleoverflow->grademaxgrade) {
$grade = $moodleoverflow->grademaxgrade;
}
// Save updated grade on local table.
if ($DB->record_exists('moodleoverflow_grades', ['userid' => $postinguser, 'moodleoverflowid' => $moodleoverflow->id])) {
$DB->set_field('moodleoverflow_grades', 'grade', $grade, ['userid' => $postinguser,
'moodleoverflowid' => $moodleoverflow->id, ]);
} else {
$gradedataobject = new stdClass();
$gradedataobject->moodleoverflowid = $moodleoverflow->id;
$gradedataobject->userid = $postinguser;
$gradedataobject->grade = $grade;
$DB->insert_record('moodleoverflow_grades', $gradedataobject, false);
}

// Save updated grade on local table.
if ($DB->record_exists('moodleoverflow_grades', ['userid' => $userid, 'moodleoverflowid' => $moodleoverflow->id])) {
$DB->set_field('moodleoverflow_grades', 'grade', $grade, ['userid' => $userid,
'moodleoverflowid' => $moodleoverflow->id, ]);
} else {
$gradedataobject = new stdClass();
$gradedataobject->moodleoverflowid = $moodleoverflow->id;
$gradedataobject->userid = $userid;
$gradedataobject->grade = $grade;
$DB->insert_record('moodleoverflow_grades', $gradedataobject, false);
// Update gradebook.
moodleoverflow_update_grades($moodleoverflow, $postinguser);
}

// Update gradebook.
moodleoverflow_update_grades($moodleoverflow, $userid);
}

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

// Calculate the posting user's updated grade.
moodleoverflow_update_user_grade_on_db($moodleoverflow, $userrating, $userid);
moodleoverflow_update_user_grade($moodleoverflow, $userrating, $userid);
}
}
}
Expand Down
38 changes: 36 additions & 2 deletions mod_form.php
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,29 @@ public function definition() {

$mform->addElement('text', 'grademaxgrade', get_string('modgrademaxgrade', 'grades'));
$mform->setType('grademaxgrade', PARAM_INT);
$mform->addRule('grademaxgrade', get_string('grademaxgradeerror', 'moodleoverflow'), 'regex', '/^[0-9]+$/', 'client');
$mform->addRule(
'grademaxgrade',
get_string('grademaxgradeerror', 'moodleoverflow'),
'regex',
'/^(0|[1-9][0-9]*)$/',
'client'
);

$mform->addElement('text', 'gradescalefactor', get_string('scalefactor', 'moodleoverflow'));
$mform->addHelpButton('gradescalefactor', 'scalefactor', 'moodleoverflow');
$mform->setType('gradescalefactor', PARAM_INT);
$mform->addRule('gradescalefactor', get_string('scalefactorerror', 'moodleoverflow'), 'regex', '/^[0-9]+$/', 'client');
$mform->addRule(
'gradescalefactor',
get_string('scalefactorerror', 'moodleoverflow'),
'regex',
'/^(0|[1-9][0-9]*)$/',
'client'
);

$mform->addElement('text', 'gradepass', get_string('gradepass', 'grades'));
$mform->addHelpButton('gradepass', 'gradepass', 'grades');
$mform->setType('gradepass', PARAM_INT);
$mform->addRule('gradepass', get_string('gradepasserror', 'moodleoverflow'), 'regex', '/^(0|[1-9][0-9]*)$/', 'client');

if ($this->_features->gradecat) {
$mform->addElement(
Expand Down Expand Up @@ -299,6 +316,18 @@ public function data_postprocessing($data) {
}
}

/**
* Handles data preprocessing.
* @param array $defaultvalues
* @return void
*/
public function data_preprocessing(&$defaultvalues) {
parent::data_preprocessing($defaultvalues);
if (isset($defaultvalues['gradepass'])) {
$defaultvalues['gradepass'] = (int)$defaultvalues['gradepass'];
}
}

/**
* Validates set data in mod_form
* @param array $data
Expand All @@ -309,6 +338,11 @@ public function data_postprocessing($data) {
public function validation($data, $files): array {
$errors = parent::validation($data, $files);

// Validate the grade settings.
if (isset($data['gradepass']) && isset($data['grademaxgrade']) && $data['gradepass'] > $data['grademaxgrade']) {
$errors['gradepass'] = get_string('gradepassvalidationerror', 'moodleoverflow');
}

// Validate that the limited answer settings.
$currenttime = time();
$isstarttime = !empty($data['la_starttime']);
Expand Down
2 changes: 1 addition & 1 deletion version.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

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

$plugin->version = 2025112700;
$plugin->version = 2025112701;
$plugin->requires = 2024100700.00; // Require Moodle 4.5.
$plugin->supported = [405, 501];
$plugin->component = 'mod_moodleoverflow';
Expand Down
Loading