mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 12:40:01 +01:00
MDL-9551 Implemented calls of grade_update() function in Quiz
This commit is contained in:
parent
9f9afbdbab
commit
d6dd21084b
@ -47,6 +47,14 @@ function xmldb_quiz_upgrade($oldversion=0) {
|
||||
$result = $result && add_index($table, $index);
|
||||
}
|
||||
|
||||
if ($result && $oldversion < 2007061100) {
|
||||
require_once $CFG->dirroot.'/mod/quiz/lib.php';
|
||||
// too much debug output
|
||||
$db->debug = false;
|
||||
quiz_update_grades();
|
||||
$db->debug = true;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
116
mod/quiz/lib.php
116
mod/quiz/lib.php
@ -164,6 +164,8 @@ function quiz_delete_instance($id) {
|
||||
}
|
||||
}
|
||||
|
||||
quiz_grade_item_delete($quiz);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@ -223,20 +225,113 @@ function quiz_cron () {
|
||||
return true;
|
||||
}
|
||||
|
||||
function quiz_grades($quizid) {
|
||||
/// Must return an array of grades, indexed by user, and a max grade.
|
||||
|
||||
$quiz = get_record('quiz', 'id', intval($quizid));
|
||||
if (empty($quiz) || empty($quiz->grade)) {
|
||||
return NULL;
|
||||
/**
|
||||
* Return grade for given user or all users.
|
||||
*
|
||||
* @param int $quizid id of quiz
|
||||
* @param int $userid optional user id, 0 means all users
|
||||
* @return array array of grades, false if none
|
||||
*/
|
||||
function quiz_get_user_grades($quiz, $userid=0) {
|
||||
global $CFG;
|
||||
|
||||
$user = $userid ? "AND u.id = $userid" : "";
|
||||
|
||||
$sql = "SELECT u.id, u.id AS userid, g.grade AS gradevalue
|
||||
FROM {$CFG->prefix}user u, {$CFG->prefix}quiz_grades g
|
||||
WHERE u.id = g.userid AND g.quiz = $quiz->id
|
||||
$user";
|
||||
|
||||
return get_records_sql($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update grades in central gradebook
|
||||
*
|
||||
* @param object $quiz null means all quizs
|
||||
* @param int $userid specific user only, 0 mean all
|
||||
*/
|
||||
function quiz_update_grades($quiz=null, $userid=0, $nullifnone=true) {
|
||||
global $CFG;
|
||||
if (!function_exists('grade_update')) { //workaround for buggy PHP versions
|
||||
require_once($CFG->libdir.'/gradelib.php');
|
||||
}
|
||||
|
||||
$return = new stdClass;
|
||||
$return->grades = get_records_menu('quiz_grades', 'quiz', $quiz->id, '', 'userid, grade');
|
||||
$return->maxgrade = get_field('quiz', 'grade', 'id', $quiz->id);
|
||||
return $return;
|
||||
if ($quiz != null) {
|
||||
if ($grades = quiz_get_user_grades($quiz, $userid)) {
|
||||
grade_update('mod/quiz', $quiz->course, 'mod', 'quiz', $quiz->id, 0, $grades);
|
||||
|
||||
} else if ($userid and $nullifnone) {
|
||||
$grade = new object();
|
||||
$grade->itemid = $quiz->id;
|
||||
$grade->userid = $userid;
|
||||
$grade->gradevalue = NULL;
|
||||
grade_update('mod/quiz', $quiz->course, 'mod', 'quiz', $quiz->id, 0, $grade);
|
||||
}
|
||||
|
||||
} else {
|
||||
$sql = "SELECT a.*, cm.idnumber as cmidnumber, a.course as courseid
|
||||
FROM {$CFG->prefix}quiz a, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m
|
||||
WHERE m.name='quiz' AND m.id=cm.module AND cm.instance=a.id";
|
||||
if ($rs = get_recordset_sql($sql)) {
|
||||
if ($rs->RecordCount() > 0) {
|
||||
while ($quiz = rs_fetch_next_record($rs)) {
|
||||
quiz_grade_item_update($quiz);
|
||||
if ($quiz->grade != 0) {
|
||||
quiz_update_grades($quiz, 0, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
rs_close($rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create grade item for given quiz
|
||||
*
|
||||
* @param object $quiz object with extra cmidnumber
|
||||
* @return int 0 if ok, error code otherwise
|
||||
*/
|
||||
function quiz_grade_item_update($quiz) {
|
||||
global $CFG;
|
||||
if (!function_exists('grade_update')) { //workaround for buggy PHP versions
|
||||
require_once($CFG->libdir.'/gradelib.php');
|
||||
}
|
||||
|
||||
if (array_key_exists('cmidnumber', $quiz)) { //it may not be always present
|
||||
$params = array('itemname'=>$quiz->name, 'idnumber'=>$quiz->cmidnumber);
|
||||
} else {
|
||||
$params = array('itemname'=>$quiz->name);
|
||||
}
|
||||
|
||||
if ($quiz->grade > 0) {
|
||||
$params['gradetype'] = GRADE_TYPE_VALUE;
|
||||
$params['grademax'] = $quiz->grade;
|
||||
$params['grademin'] = 0;
|
||||
|
||||
} else {
|
||||
$params['gradetype'] = GRADE_TYPE_NONE;
|
||||
}
|
||||
|
||||
return grade_update('mod/quiz', $quiz->course, 'mod', 'quiz', $quiz->id, 0, NULL, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete grade item for given quiz
|
||||
*
|
||||
* @param object $quiz object
|
||||
* @return object quiz
|
||||
*/
|
||||
function quiz_grade_item_delete($quiz) {
|
||||
global $CFG;
|
||||
require_once($CFG->libdir.'/gradelib.php');
|
||||
|
||||
return grade_update('mod/quiz', $quiz->course, 'mod', 'quiz', $quiz->id, 0, NULL, array('deleted'=>1));
|
||||
}
|
||||
|
||||
|
||||
function quiz_get_participants($quizid) {
|
||||
/// Returns an array of users who have data in a given quiz
|
||||
/// (users with records in quiz_attempts and quiz_question_versions)
|
||||
@ -694,6 +789,9 @@ function quiz_after_add_or_update($quiz) {
|
||||
add_event($event);
|
||||
}
|
||||
}
|
||||
|
||||
//update related grade item
|
||||
quiz_grade_item_update($quiz);
|
||||
}
|
||||
|
||||
function quiz_get_view_actions() {
|
||||
|
@ -386,6 +386,10 @@ function quiz_set_grade($newgrade, &$quiz) {
|
||||
", false);
|
||||
}
|
||||
|
||||
// update grade item and send all grades to gradebook
|
||||
quiz_grade_item_update($quiz);
|
||||
quiz_update_grades($quiz);
|
||||
|
||||
if ($success) {
|
||||
return commit_sql();
|
||||
} else {
|
||||
@ -436,6 +440,8 @@ function quiz_save_best_grade($quiz, $userid = null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
quiz_update_grades($quiz, $userid);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,7 @@ class quiz_report extends quiz_default_report {
|
||||
} else {
|
||||
quiz_save_best_grade($quiz, $userid);
|
||||
}
|
||||
quiz_update_grades($quiz, $userid);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -5,8 +5,8 @@
|
||||
// This fragment is called by moodle_needs_upgrading() and /admin/index.php
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$module->version = 2007022800; // The (date) version of this module
|
||||
$module->requires = 2007020200; // Requires this Moodle version
|
||||
$module->version = 2007061100; // The (date) version of this module
|
||||
$module->requires = 2007060502; // Requires this Moodle version
|
||||
$module->cron = 0; // How often should cron check this module (seconds)?
|
||||
|
||||
?>
|
||||
|
Loading…
x
Reference in New Issue
Block a user