From: skodak Date: Fri, 30 May 2008 17:43:00 +0000 (+0000) Subject: MDL-14679 finished gradelib conversion X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=9718765e927be2942f8fa9ce36768edad0eb9923;p=moodle.git MDL-14679 finished gradelib conversion --- diff --git a/lib/grade/grade_grade.php b/lib/grade/grade_grade.php index d72dc6055d..da34086acd 100644 --- a/lib/grade/grade_grade.php +++ b/lib/grade/grade_grade.php @@ -171,9 +171,10 @@ class grade_grade extends grade_object { return grade_grade::fetch_users_grades($grade_item, $first, $include_missing) + grade_grade::fetch_users_grades($grade_item, $second, $include_missing); } - $user_ids_cvs = implode(',', $userids); + list($user_ids_cvs, $params) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED, 'uid0'); + $params['giid'] = $grade_item->id; $result = array(); - if ($grade_records = $DB->get_records_select('grade_grades', "itemid={$grade_item->id} AND userid IN ($user_ids_cvs)")) { + if ($grade_records = $DB->get_records_select('grade_grades', "itemid=:giid AND userid $user_ids_cvs", $params)) { foreach ($grade_records as $record) { $result[$record->userid] = new grade_grade($record, false); } @@ -387,7 +388,7 @@ class grade_grade extends grade_object { $now = time(); // no rounding needed, this is not supposed to be called every 10 seconds list($usql, $params) = $DB->get_in_or_equal($items); $params[] = $now; - if ($rs = $DB->get_recordset_select('grade_grades', "itemid $usql AND locked = 0 AND locktime > 0 AND locktime < ?")) { + if ($rs = $DB->get_recordset_select('grade_grades', "itemid $usql AND locked = 0 AND locktime > 0 AND locktime < ?", $params)) { foreach ($rs as $grade) { $grade_grade = new grade_grade($grade, false); $grade_grade->locked = time(); diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index c23ec32abc..fba8038e44 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -384,7 +384,7 @@ class grade_item extends grade_object { } // always place the new items at the end, move them after insert if needed - $last_sortorder = $DB->get_field_select('grade_items', 'MAX(sortorder)', "courseid = {$this->courseid}"); + $last_sortorder = $DB->get_field_select('grade_items', 'MAX(sortorder)', "courseid = ?", array($this->courseid)); if (!empty($last_sortorder)) { $this->sortorder = $last_sortorder + 1; } else { @@ -605,13 +605,18 @@ class grade_item extends grade_object { /** * Returns the number of grades that are hidden. - * @param return int Number of hidden grades + * @param string $groupsql + * @param array $params sql params in $groupsql + * @param string $groupsqlwhere + * @return int Number of hidden grades */ - public function has_hidden_grades($groupsql="", $groupwheresql="") { + public function has_hidden_grades($groupsql="", array $params=null, $groupwheresql="") { global $DB; - $params = array($this->id); + $params = (array)$params; + $params['itemid'] = $this->id; + return $DB->get_field_sql("SELECT COUNT(*) FROM {grade_grades} g LEFT JOIN " - ."{user} u ON g.userid = u.id $groupsql WHERE itemid = ? AND hidden = 1 $groupwheresql", $params); + ."{user} u ON g.userid = u.id $groupsql WHERE itemid = :itemid AND hidden = 1 $groupwheresql", $params); } /** diff --git a/lib/grade/grade_object.php b/lib/grade/grade_object.php index 6a71955fbc..97a7114a91 100644 --- a/lib/grade/grade_object.php +++ b/lib/grade/grade_object.php @@ -154,7 +154,7 @@ abstract class grade_object { $wheresql = array(); // remove incorrect params - $named_params = array(); + $params = array(); foreach ($params as $var=>$value) { if (!in_array($var, $instance->required_fields) and !array_key_exists($var, $instance->optional_fields)) { @@ -164,7 +164,7 @@ abstract class grade_object { $wheresql[] = " $var IS NULL "; } else { $wheresql[] = " $var = ? "; - $named_params[] = $value; + $params[] = $value; } } @@ -175,7 +175,7 @@ abstract class grade_object { } global $DB; - if ($datas = $DB->get_records_select($table, $wheresql, $named_params)) { + if ($datas = $DB->get_records_select($table, $wheresql, $params)) { $result = array(); foreach($datas as $data) { $instance = new $classname(); diff --git a/lib/gradelib.php b/lib/gradelib.php index d697ae7699..7c078e0fb8 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -63,7 +63,7 @@ require_once($CFG->libdir . '/grade/grade_outcome.php'); * @param mixed $itemdetails object or array describing the grading item, NULL if no change */ function grade_update($source, $courseid, $itemtype, $itemmodule, $iteminstance, $itemnumber, $grades=NULL, $itemdetails=NULL) { - global $USER, $CFG; + global $USER, $CFG, $DB; // only following grade_item properties can be changed in this function $allowed = array('itemname', 'idnumber', 'gradetype', 'grademax', 'grademin', 'scaleid', 'multfactor', 'plusfactor', 'deleted', 'hidden'); @@ -208,20 +208,17 @@ function grade_update($source, $courseid, $itemtype, $itemmodule, $iteminstance, } $count = count($grades); - if ($count == 1) { - reset($grades); - $uid = key($grades); - $sql = "SELECT * FROM {$CFG->prefix}grade_grades WHERE itemid = $grade_item->id AND userid = $uid"; - - } else if ($count < 200) { - $uids = implode(',', array_keys($grades)); - $sql = "SELECT * FROM {$CFG->prefix}grade_grades WHERE itemid = $grade_item->id AND userid IN ($uids)"; + if ($count > 0 and $count < 200) { + list($uids, $params) = $DB->get_in_or_equal(array_keys($grades), SQL_PARAMS_NAMED, $start='uid0'); + $params['gid'] = $grade_item->id; + $sql = "SELECT * FROM {grade_grades} WHERE itemid = :gid AND userid $uids"; } else { - $sql = "SELECT * FROM {$CFG->prefix}grade_grades WHERE itemid = $grade_item->id"; + $sql = "SELECT * FROM {grade_grades} WHERE itemid = :gid"; + $params = array('gid'=>$grade_item->id); } - $rs = get_recordset_sql($sql); + $rs = $DB->get_recordset_sql($sql, $params); $failed = false; @@ -229,8 +226,9 @@ function grade_update($source, $courseid, $itemtype, $itemmodule, $iteminstance, $grade_grade = null; $grade = null; - while ($rs and !rs_EOF($rs)) { - if (!$gd = rs_fetch_next_record($rs)) { + while ($rs and $rs->valid()) { + $rs->next(); + if (!$gd = $rs->current()) { break; } $userid = $gd->userid; @@ -296,7 +294,7 @@ function grade_update($source, $courseid, $itemtype, $itemmodule, $iteminstance, } if ($rs) { - rs_close($rs); + $rs->close(); } if (!$failed) { @@ -558,6 +556,8 @@ function grade_get_grades($courseid, $itemtype, $itemmodule, $iteminstance, $use * @return string value, NULL if no setting */ function grade_get_setting($courseid, $name, $default=null, $resetcache=false) { + global $DB; + static $cache = array(); if ($resetcache or !array_key_exists($courseid, $cache)) { @@ -570,7 +570,7 @@ function grade_get_setting($courseid, $name, $default=null, $resetcache=false) { return $cache[$courseid][$name]; } - if (!$data = get_record('grade_settings', 'courseid', $courseid, 'name', addslashes($name))) { + if (!$data = $DB->get_record('grade_settings', array('courseid'=>$courseid, 'name'=>$name))) { $result = null; } else { $result = $data->value; @@ -590,10 +590,12 @@ function grade_get_setting($courseid, $name, $default=null, $resetcache=false) { * @return object */ function grade_get_settings($courseid) { + global $DB; + $settings = new object(); $settings->id = $courseid; - if ($records = get_records('grade_settings', 'courseid', $courseid)) { + if ($records = $DB->get_records('grade_settings', array('courseid'=>$courseid))) { foreach ($records as $record) { $settings->{$record->name} = $record->value; } @@ -610,21 +612,23 @@ function grade_get_settings($courseid) { * @return void */ function grade_set_setting($courseid, $name, $value) { + global $DB; + if (is_null($value)) { - delete_records('grade_settings', 'courseid', $courseid, 'name', addslashes($name)); + $DB->delete_records('grade_settings', array('courseid'=>$courseid, 'name'=>$name)); - } else if (!$existing = get_record('grade_settings', 'courseid', $courseid, 'name', addslashes($name))) { + } else if (!$existing = $DB->get_record('grade_settings', array('courseid'=>$courseid, 'name'=>$name))) { $data = new object(); $data->courseid = $courseid; - $data->name = addslashes($name); - $data->value = addslashes($value); - insert_record('grade_settings', $data); + $data->name = $name; + $data->value = $value; + $DB->insert_record('grade_settings', $data); } else { $data = new object(); $data->id = $existing->id; - $data->value = addslashes($value); - update_record('grade_settings', $data); + $data->value = $value; + $DB->update_record('grade_settings', $data); } grade_get_setting($courseid, null, null, true); // reset the cache @@ -746,6 +750,8 @@ function grade_get_categories_menu($courseid, $includenew=false) { * @return array of grade_boundary=>letter_string */ function grade_get_letters($context=null) { + global $DB; + if (empty($context)) { //default grading letters return array('93'=>'A', '90'=>'A-', '87'=>'B+', '83'=>'B', '80'=>'B-', '77'=>'C+', '73'=>'C', '70'=>'C-', '67'=>'D+', '60'=>'D', '0'=>'F'); @@ -767,7 +773,7 @@ function grade_get_letters($context=null) { array_unshift($contexts, $context->id); foreach ($contexts as $ctxid) { - if ($records = get_records('grade_letters', 'contextid', $ctxid, 'lowerboundary DESC')) { + if ($records = $DB->get_records('grade_letters', array('contextid'=>$ctxid), 'lowerboundary DESC')) { foreach ($records as $record) { $letters[$record->lowerboundary] = $record->letter; } @@ -794,6 +800,8 @@ function grade_get_letters($context=null) { * @return boolean true means idnumber ok */ function grade_verify_idnumber($idnumber, $courseid, $grade_item=null, $cm=null) { + global $DB; + if ($idnumber == '') { //we allow empty idnumbers return true; @@ -806,11 +814,11 @@ function grade_verify_idnumber($idnumber, $courseid, $grade_item=null, $cm=null) return true; } - if (get_records_select('course_modules', "course = $courseid AND idnumber='$idnumber'")) { + if ($DB->record_exists('course_modules', array('course'=>$courseid, 'idnumber'=>$idnumber))) { return false; } - if (get_records_select('grade_items', "courseid = $courseid AND idnumber='$idnumber'")) { + if ($DB->record_exists('grade_items', array('courseid'=>$courseid, 'idnumber'=>$idnumber))) { return false; } @@ -822,7 +830,8 @@ function grade_verify_idnumber($idnumber, $courseid, $grade_item=null, $cm=null) * @param int $courseid */ function grade_force_full_regrading($courseid) { - set_field('grade_items', 'needsupdate', 1, 'courseid', $courseid); + global $DB; + $DB->set_field('grade_items', 'needsupdate', 1, array('courseid'=>$courseid)); } /** @@ -981,14 +990,15 @@ function grade_grab_legacy_grades($courseid) { * @return success */ function grade_grab_course_grades($courseid, $modname=null) { - global $CFG; + global $CFG, $DB; if ($modname) { $sql = "SELECT a.*, cm.idnumber as cmidnumber, m.name as modname - FROM {$CFG->prefix}$modname a, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m - WHERE m.name='$modname' AND m.visible=1 AND m.id=cm.module AND cm.instance=a.id AND cm.course=$courseid"; + FROM {".$modname."} a, {course_modules} cm, {modules} m + WHERE m.name=:modname AND m.visible=1 AND m.id=cm.module AND cm.instance=a.id AND cm.course=:courseid"; + $params = array('modname'=>$modname, 'courseid'=>$courseid); - if ($modinstances = get_records_sql($sql)) { + if ($modinstances = $DB->get_records_sql($sql, $params)) { foreach ($modinstances as $modinstance) { grade_update_mod_grades($modinstance); } @@ -1011,10 +1021,11 @@ function grade_grab_course_grades($courseid, $modname=null) { if (file_exists($fullmod.'/lib.php')) { // get all instance of the activity $sql = "SELECT a.*, cm.idnumber as cmidnumber, m.name as modname - FROM {$CFG->prefix}$mod a, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m - WHERE m.name='$mod' AND m.visible=1 AND m.id=cm.module AND cm.instance=a.id AND cm.course=$courseid"; + FROM {".$mod."} a, {course_modules} cm, {modules} m + WHERE m.name=:mod AND m.visible=1 AND m.id=cm.module AND cm.instance=a.id AND cm.course=:courseid"; + $params = array('mod'=>$mod, 'courseid'=>$courseid); - if ($modinstances = get_records_sql($sql)) { + if ($modinstances = $DB->get_records_sql($sql, $params)) { foreach ($modinstances as $modinstance) { grade_update_mod_grades($modinstance); } @@ -1029,7 +1040,7 @@ function grade_grab_course_grades($courseid, $modname=null) { * @return boolean success */ function grade_update_mod_grades($modinstance, $userid=0) { - global $CFG; + global $CFG, $DB; $fullmod = $CFG->dirroot.'/mod/'.$modinstance->modname; if (!file_exists($fullmod.'/lib.php')) { @@ -1052,7 +1063,7 @@ function grade_update_mod_grades($modinstance, $userid=0) { $scaleid = NULL; if (!is_numeric($grademax)) { // scale name is provided as a string, try to find it - if (!$scale = get_record('scale', 'name', $grademax)) { + if (!$scale = $DB->get_record('scale', array('name'=>$grademax))) { debugging('Incorrect scale name! name:'.$grademax); return false; } @@ -1176,9 +1187,11 @@ function grade_get_legacy_grade_item($modinstance, $grademax, $scaleid) { * @param object $context */ function remove_grade_letters($context, $showfeedback) { + global $DB; + $strdeleted = get_string('deleted'); - delete_records('grade_letters', 'contextid', $context->id); + $DB->delete_records('grade_letters', array('contextid'=>$context->id)); if ($showfeedback) { notify($strdeleted.' - '.get_string('letters', 'grades')); } @@ -1189,6 +1202,8 @@ function remove_grade_letters($context, $showfeedback) { * @param bool $showfeedback print feedback */ function remove_course_grades($courseid, $showfeedback) { + global $DB; + $strdeleted = get_string('deleted'); $course_category = grade_category::fetch_course_category($courseid); @@ -1202,7 +1217,7 @@ function remove_course_grades($courseid, $showfeedback) { $outcome->delete('coursedelete'); } } - delete_records('grade_outcomes_courses', 'courseid', $courseid); + $DB->delete_records('grade_outcomes_courses', array('courseid'=>$courseid)); if ($showfeedback) { notify($strdeleted.' - '.get_string('outcomes', 'grades')); } @@ -1216,7 +1231,7 @@ function remove_course_grades($courseid, $showfeedback) { notify($strdeleted.' - '.get_string('scales')); } - delete_records('grade_settings', 'courseid', $courseid); + $DB->delete_records('grade_settings', array('courseid'=>$courseid)); if ($showfeedback) { notify($strdeleted.' - '.get_string('settings', 'grades')); } @@ -1229,27 +1244,29 @@ function remove_course_grades($courseid, $showfeedback) { * @param bool $showfeedback print feedback */ function grade_course_category_delete($categoryid, $newparentid, $showfeedback) { + global $DB; + $context = get_context_instance(CONTEXT_COURSECAT, $categoryid); - delete_records('grade_letters', 'contextid', $context->id); + $DB->delete_records('grade_letters', array('contextid'=>$context->id)); } /** * Does gradebook cleanup when module uninstalled. */ function grade_uninstalled_module($modname) { - global $CFG; + global $CFG, $DB; $sql = "SELECT * - FROM {$CFG->prefix}grade_items - WHERE itemtype='mod' AND itemmodule='$modname'"; + FROM {grade_items} + WHERE itemtype='mod' AND itemmodule=?"; // go all items for this module and delete them including the grades - if ($rs = get_recordset_sql($sql)) { - while ($item = rs_fetch_next_record($rs)) { + if ($rs = $DB->get_recordset_sql($sql, array($modname))) { + foreach ($rs as $item) { $grade_item = new grade_item($item, false); $grade_item->delete('moduninstall'); } - rs_close($rs); + $rs->close(); } } @@ -1257,41 +1274,41 @@ function grade_uninstalled_module($modname) { * Grading cron job */ function grade_cron() { - global $CFG; + global $CFG, $DB; $now = time(); $sql = "SELECT i.* - FROM {$CFG->prefix}grade_items i - WHERE i.locked = 0 AND i.locktime > 0 AND i.locktime < $now AND EXISTS ( - SELECT 'x' FROM {$CFG->prefix}grade_items c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)"; + FROM {grade_items} i + WHERE i.locked = 0 AND i.locktime > 0 AND i.locktime < ? AND EXISTS ( + SELECT 'x' FROM {grade_items} c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)"; // go through all courses that have proper final grades and lock them if needed - if ($rs = get_recordset_sql($sql)) { - while ($item = rs_fetch_next_record($rs)) { + if ($rs = $DB->get_recordset_sql($sql, params($now))) { + foreach ($rs as $item) { $grade_item = new grade_item($item, false); $grade_item->locked = $now; $grade_item->update('locktime'); } - rs_close($rs); + $rs->close(); } $grade_inst = new grade_grade(); $fields = 'g.'.implode(',g.', $grade_inst->required_fields); $sql = "SELECT $fields - FROM {$CFG->prefix}grade_grades g, {$CFG->prefix}grade_items i - WHERE g.locked = 0 AND g.locktime > 0 AND g.locktime < $now AND g.itemid=i.id AND EXISTS ( - SELECT 'x' FROM {$CFG->prefix}grade_items c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)"; + FROM {grade_grades} g, {grade_items} i + WHERE g.locked = 0 AND g.locktime > 0 AND g.locktime < ? AND g.itemid=i.id AND EXISTS ( + SELECT 'x' FROM {grade_items} c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)"; // go through all courses that have proper final grades and lock them if needed - if ($rs = get_recordset_sql($sql)) { - while ($grade = rs_fetch_next_record($rs)) { + if ($rs = $DB->get_recordset_sql($sql, array($now))) { + foreach ($rs as $grade) { $grade_grade = new grade_grade($grade, false); $grade_grade->locked = $now; $grade_grade->update('locktime'); } - rs_close($rs); + $rs->close(); } //TODO: do not run this cleanup every cron invocation @@ -1300,7 +1317,7 @@ function grade_cron() { $histlifetime = $now - ($CFG->gradehistorylifetime * 3600 * 24); $tables = array('grade_outcomes_history', 'grade_categories_history', 'grade_items_history', 'grade_grades_history', 'scale_history'); foreach ($tables as $table) { - if (delete_records_select($table, "timemodified < $histlifetime")) { + if ($DB->delete_records_select($table, "timemodified < ?", array($histlifetime))) { mtrace(" Deleted old grade history records from '$table'"); } }