From 5053f00f3367dfa37590c876fa5e066916f28956 Mon Sep 17 00:00:00 2001 From: skodak Date: Thu, 5 Jun 2008 10:50:15 +0000 Subject: [PATCH] MDL-15103 towards assignment dml conversion --- mod/assignment/lib.php | 258 +++++++++++++++++++---------------------- 1 file changed, 122 insertions(+), 136 deletions(-) diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index f41dedd454..53f09a6f35 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -40,7 +40,7 @@ class assignment_base { * @param course object, usually null, but if we have it we pass it to save db access */ function assignment_base($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) { - global $COURSE; + global $COURSE, $DB; if ($cmid == 'staticonly') { //use static functions only! @@ -61,13 +61,13 @@ class assignment_base { $this->course = $course; } else if ($this->cm->course == $COURSE->id) { $this->course = $COURSE; - } else if (! $this->course = get_record('course', 'id', $this->cm->course)) { + } else if (! $this->course = $DB->get_record('course', array('id'=>$this->cm->course))) { print_error('invalidid', 'assignment'); } if ($assignment) { $this->assignment = $assignment; - } else if (! $this->assignment = get_record('assignment', 'id', $this->cm->instance)) { + } else if (! $this->assignment = $DB->get_record('assignment', array('id'=>$this->cm->instance))) { print_error('invalidid', 'assignment'); } @@ -206,7 +206,7 @@ class assignment_base { * @param $submission object The submission object or NULL in which case it will be loaded */ function view_feedback($submission=NULL) { - global $USER, $CFG; + global $USER, $CFG, $DB; require_once($CFG->libdir.'/gradelib.php'); if (!has_capability('mod/assignment:submit', $this->context, $USER->id, false)) { @@ -234,7 +234,7 @@ class assignment_base { $graded_by = $grade->usermodified; /// We need the teacher info - if (!$teacher = get_record('user', 'id', $graded_by)) { + if (!$teacher = $DB->get_record('user', array('id'=>$graded_by))) { print_error('cannotfindteacher'); } @@ -567,7 +567,7 @@ class assignment_base { } if ($commenting) { $commentvalue = trim($_POST['submissioncomment'][$id]); - $updatedb = $updatedb || ($submission->submissioncomment != stripslashes($commentvalue)); + $updatedb = $updatedb || ($submission->submissioncomment != $commentvalue); $submission->submissioncomment = $commentvalue; } else { unset($submission->submissioncomment); // Don't need to update this. @@ -588,12 +588,12 @@ class assignment_base { if (!isset($submission->submissioncomment)) { $submission->submissioncomment = ''; } - if (!$sid = insert_record('assignment_submissions', $submission)) { + if (!$sid = $DB->insert_record('assignment_submissions', $submission)) { return false; } $submission->id = $sid; } else { - if (!update_record('assignment_submissions', $submission)) { + if (!$DB->update_record('assignment_submissions', $submission)) { return false; } } @@ -775,15 +775,14 @@ class assignment_base { * This method gets its arguments from the page parameters userid and offset */ function display_submission($extra_javascript = '') { - - global $CFG; + global $CFG, $DB; require_once($CFG->libdir.'/gradelib.php'); require_once($CFG->libdir.'/tablelib.php'); $userid = required_param('userid', PARAM_INT); $offset = required_param('offset', PARAM_INT);//offset for where to start looking for student. - if (!$user = get_record('user', 'id', $userid)) { + if (!$user = $DB->get_record('user', array('id'=>$userid))) { print_error('nousers'); } @@ -826,8 +825,8 @@ class assignment_base { s.id AS submissionid, s.grade, s.submissioncomment, s.timemodified, s.timemarked, COALESCE(SIGN(SIGN(s.timemarked) + SIGN(s.timemarked - s.timemodified)), 0) AS status '; - $sql = 'FROM '.$CFG->prefix.'user u '. - 'LEFT JOIN '.$CFG->prefix.'assignment_submissions s ON u.id = s.userid + $sql = 'FROM {user} u '. + 'LEFT JOIN {assignment_submissions} s ON u.id = s.userid AND s.assignment = '.$this->assignment->id.' '. 'WHERE u.id IN ('.implode(',', $users).') '; @@ -835,7 +834,7 @@ class assignment_base { $sort = 'ORDER BY '.$sort.' '; } - if (($auser = get_records_sql($select.$sql.$sort, $offset+1, 1)) !== false) { + if (($auser = $DB->get_records_sql($select.$sql.$sort, null, $offset+1, 1)) !== false) { $nextuser = array_shift($auser); /// Calculate user status $nextuser->status = ($nextuser->timemarked > 0) && ($nextuser->timemarked >= $nextuser->timemodified); @@ -871,7 +870,7 @@ class assignment_base { echo ''; echo ''; if ($submission->teacher) { - $teacher = get_record('user', 'id', $submission->teacher); + $teacher = $DB->get_record('user', array('id'=>$submission->teacher)); } else { global $USER; $teacher = $USER; @@ -1002,7 +1001,7 @@ class assignment_base { * Display all the submissions ready for grading */ function display_submissions($message='') { - global $CFG, $DB, $USER; + global $CFG, $DB, $USER, $DB; require_once($CFG->libdir.'/gradelib.php'); /* first we check to see if the form has just been submitted @@ -1153,8 +1152,8 @@ class assignment_base { s.id AS submissionid, s.grade, s.submissioncomment, s.timemodified, s.timemarked, COALESCE(SIGN(SIGN(s.timemarked) + SIGN(s.timemarked - s.timemodified)), 0) AS status '; - $sql = 'FROM '.$CFG->prefix.'user u '. - 'LEFT JOIN '.$CFG->prefix.'assignment_submissions s ON u.id = s.userid + $sql = 'FROM {user} u '. + 'LEFT JOIN {assignment_submissions} s ON u.id = s.userid AND s.assignment = '.$this->assignment->id.' '. 'WHERE '.$where.'u.id IN ('.implode(',',$users).') '; @@ -1167,7 +1166,7 @@ class assignment_base { $strgrade = get_string('grade'); $grademenu = make_grades_menu($this->assignment->grade); - if (($ausers = get_records_sql($select.$sql.$sort, $table->get_page_start(), $table->get_page_size())) !== false) { + if (($ausers = $DB->get_records_sql($select.$sql.$sort, null, $table->get_page_start(), $table->get_page_size())) !== false) { $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, array_keys($ausers)); foreach ($ausers as $auser) { $final_grade = $grading_info->items[0]->grades[$auser->id]; @@ -1376,7 +1375,7 @@ class assignment_base { global $CFG, $USER; require_once($CFG->libdir.'/gradelib.php'); - if (!$feedback = data_submitted()) { // No incoming data? + if (!$feedback = data_submitted(false)) { // No incoming data? return false; } @@ -1420,7 +1419,7 @@ class assignment_base { // $submission->timemodified = time(); } - if (! update_record('assignment_submissions', $submission)) { + if (! $DB->update_record('assignment_submissions', $submission)) { return false; } @@ -1444,7 +1443,7 @@ class assignment_base { require_once($CFG->libdir.'/gradelib.php'); - if (!$formdata = data_submitted()) { + if (!$formdata = data_submitted(false)) { return; } @@ -1474,23 +1473,23 @@ class assignment_base { * @return object The submission */ function get_submission($userid=0, $createnew=false, $teachermodified=false) { - global $USER; + global $USER, $DB; if (empty($userid)) { $userid = $USER->id; } - $submission = get_record('assignment_submissions', 'assignment', $this->assignment->id, 'userid', $userid); + $submission = $DB->get_record('assignment_submissions', array('assignment'=>$this->assignment->id, 'userid'=>$userid)); if ($submission || !$createnew) { return $submission; } $newsubmission = $this->prepare_new_submission($userid, $teachermodified); - if (!insert_record("assignment_submissions", $newsubmission)) { + if (!$DB->insert_record("assignment_submissions", $newsubmission)) { print_error('cannotinsertempty', 'assignment'); } - return get_record('assignment_submissions', 'assignment', $this->assignment->id, 'userid', $userid); + return $DB->get_record('assignment_submissions', array('assignment'=>$this->assignment->id, 'userid'=>$userid)); } /** @@ -1555,13 +1554,13 @@ class assignment_base { * @param $submission object The submission that has changed */ function email_teachers($submission) { - global $CFG; + global $CFG, $DB; if (empty($this->assignment->emailteachers)) { // No need to do anything return; } - $user = get_record('user', 'id', $submission->userid); + $user = $DB->get_record('user', array('id'=>$submission->userid)); if ($teachers = $this->get_graders($user)) { @@ -1884,7 +1883,7 @@ class assignment_base { * Reset all submissions */ function reset_userdata($data) { - global $CFG; + global $CFG, $DB; require_once($CFG->libdir.'/filelib.php'); if (!count_records('assignment', 'course', $data->courseid, 'assignmenttype', $this->type)) { @@ -1898,12 +1897,13 @@ class assignment_base { if (!empty($data->reset_assignment_submissions)) { $assignmentssql = "SELECT a.id - FROM {$CFG->prefix}assignment a - WHERE a.course={$data->courseid} AND a.assignmenttype='{$this->type}'"; + FROM {assignment} a + WHERE a.course=? AND a.assignmenttype=?"; + $params = array($data->courseid, $this->type); - delete_records_select('assignment_submissions', "assignment IN ($assignmentssql)"); + $DB->delete_records_select('assignment_submissions', "assignment IN ($assignmentssql)", $params); - if ($assignments = get_records_sql($assignmentssql)) { + if ($assignments = $DB->get_records_sql($assignmentssql, $params)) { foreach ($assignments as $assignmentid=>$unused) { fulldelete($CFG->dataroot.'/'.$data->courseid.'/moddata/assignment/'.$assignmentid); } @@ -2027,8 +2027,7 @@ function assignment_user_complete($course, $user, $mod, $assignment) { * Finds all assignment notifications that have yet to be mailed out, and mails them */ function assignment_cron () { - - global $CFG, $USER; + global $CFG, $USER, $DB; /// first execute all crons in plugins if ($plugins = get_list_of_plugins('mod/assignment/type')) { @@ -2053,7 +2052,7 @@ function assignment_cron () { $realuser = clone($USER); foreach ($submissions as $key => $submission) { - if (! set_field("assignment_submissions", "mailed", "1", "id", "$submission->id")) { + if (! $DB->set_field("assignment_submissions", "mailed", "1", array("id"=>$submission->id))) { echo "Could not update the mailed field for id $submission->id. Not mailed.\n"; unset($submissions[$key]); } @@ -2065,12 +2064,12 @@ function assignment_cron () { echo "Processing assignment submission $submission->id\n"; - if (! $user = get_record("user", "id", "$submission->userid")) { + if (! $user = $DB->get_record("user", array("id"=>$submission->userid))) { echo "Could not find user $post->userid\n"; continue; } - if (! $course = get_record("course", "id", "$submission->course")) { + if (! $course = $DB->get_record("course", array("id"=>$submission->course))) { echo "Could not find course $submission->course\n"; continue; } @@ -2085,7 +2084,7 @@ function assignment_cron () { continue; } - if (! $teacher = get_record("user", "id", "$submission->teacher")) { + if (! $teacher = $DB->get_record("user", array("id"=>$submission->teacher))) { echo "Could not find teacher $submission->teacher\n"; continue; } @@ -2146,17 +2145,23 @@ function assignment_cron () { * @return array array of grades, false if none */ function assignment_get_user_grades($assignment, $userid=0) { - global $CFG; + global $CFG, $DB; - $user = $userid ? "AND u.id = $userid" : ""; + if ($userid) { + $user = "AND u.id = :userid"; + $params = array('userid'=>$userid); + } else { + $user = ""; + } + $params['aid'] = $assignment->id; $sql = "SELECT u.id, u.id AS userid, s.grade AS rawgrade, s.submissioncomment AS feedback, s.format AS feedbackformat, s.teacher AS usermodified, s.timemarked AS dategraded, s.timemodified AS datesubmitted - FROM {$CFG->prefix}user u, {$CFG->prefix}assignment_submissions s - WHERE u.id = s.userid AND s.assignment = $assignment->id + FROM {user} u, {assignment_submissions} s + WHERE u.id = s.userid AND s.assignment = :aid $user"; - return get_records_sql($sql); + return $DB->get_records_sql($sql, $params); } /** @@ -2166,10 +2171,8 @@ function assignment_get_user_grades($assignment, $userid=0) { * @param int $userid specific user only, 0 mean all */ function assignment_update_grades($assignment=null, $userid=0, $nullifnone=true) { - global $CFG; - if (!function_exists('grade_update')) { //workaround for buggy PHP versions - require_once($CFG->libdir.'/gradelib.php'); - } + global $CFG, $DB; + require_once($CFG->libdir.'/gradelib.php'); if ($assignment != null) { if ($grades = assignment_get_user_grades($assignment, $userid)) { @@ -2185,17 +2188,17 @@ function assignment_update_grades($assignment=null, $userid=0, $nullifnone=true) } else { $sql = "SELECT a.*, cm.idnumber as cmidnumber, a.course as courseid - FROM {$CFG->prefix}assignment a, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m + FROM {assignment} a, {course_modules} cm, {modules} m WHERE m.name='assignment' AND m.id=cm.module AND cm.instance=a.id"; - if ($rs = get_recordset_sql($sql)) { - while ($assignment = rs_fetch_next_record($rs)) { + if ($rs = $DB->get_recordset_sql($sql)) { + foreach ($rs as $assignment) { if ($assignment->grade != 0) { assignment_update_grades($assignment); } else { assignment_grade_item_update($assignment); } } - rs_close($rs); + $rs->close(); } } } @@ -2209,9 +2212,7 @@ function assignment_update_grades($assignment=null, $userid=0, $nullifnone=true) */ function assignment_grade_item_update($assignment, $grades=NULL) { global $CFG; - if (!function_exists('grade_update')) { //workaround for buggy PHP versions - require_once($CFG->libdir.'/gradelib.php'); - } + require_once($CFG->libdir.'/gradelib.php'); if (!isset($assignment->courseid)) { $assignment->courseid = $assignment->course; @@ -2264,21 +2265,20 @@ function assignment_grade_item_delete($assignment) { * @return array of user objects */ function assignment_get_participants($assignmentid) { - - global $CFG; + global $CFG, $DB; //Get students - $students = get_records_sql("SELECT DISTINCT u.id, u.id - FROM {$CFG->prefix}user u, - {$CFG->prefix}assignment_submissions a - WHERE a.assignment = '$assignmentid' and - u.id = a.userid"); + $students = $DB->get_records_sql("SELECT DISTINCT u.id, u.id + FROM {user} u, + {assignment_submissions} a + WHERE a.assignment = ? and + u.id = a.userid", array($assignmentid)); //Get teachers - $teachers = get_records_sql("SELECT DISTINCT u.id, u.id - FROM {$CFG->prefix}user u, - {$CFG->prefix}assignment_submissions a - WHERE a.assignment = '$assignmentid' and - u.id = a.teacher"); + $teachers = $DB->get_records_sql("SELECT DISTINCT u.id, u.id + FROM {user} u, + {assignment_submissions} a + WHERE a.assignment = ? and + u.id = a.teacher", array($assignmentid)); //Add teachers to students if ($teachers) { @@ -2299,10 +2299,11 @@ function assignment_get_participants($assignmentid) { * @return boolean True if the scale is used by the assignment */ function assignment_scale_used($assignmentid, $scaleid) { + global $DB; $return = false; - $rec = get_record('assignment','id',$assignmentid,'grade',-$scaleid); + $rec = $DB->get_record('assignment', array('id'=>$assignmentid,'grade'=>-$scaleid)); if (!empty($rec) && !empty($scaleid)) { $return = true; @@ -2319,7 +2320,9 @@ function assignment_scale_used($assignmentid, $scaleid) { * @return boolean True if the scale is used by any assignment */ function assignment_scale_used_anywhere($scaleid) { - if ($scaleid and record_exists('assignment', 'grade', -$scaleid)) { + global $DB; + + if ($scaleid and $DB->record_exists('assignment', array('grade'=>-$scaleid))) { return true; } else { return false; @@ -2339,25 +2342,26 @@ function assignment_scale_used_anywhere($scaleid) { * @return boolean Always returns true */ function assignment_refresh_events($courseid = 0) { + global $DB; if ($courseid == 0) { - if (! $assignments = get_records("assignment")) { + if (! $assignments = $DB->get_records("assignment")) { return true; } } else { - if (! $assignments = get_records("assignment", "course", $courseid)) { + if (! $assignments = $DB->get_records("assignment", array("course"=>$courseid))) { return true; } } - $moduleid = get_field('modules', 'id', 'name', 'assignment'); + $moduleid = $DB->get_field('modules', 'id', array('name'=>'assignment')); foreach ($assignments as $assignment) { $event = NULL; - $event->name = addslashes($assignment->name); - $event->description = addslashes($assignment->description); + $event->name = $assignment->name; + $event->description = $assignment->description; $event->timestart = $assignment->timedue; - if ($event->id = get_field('event', 'id', 'modulename', 'assignment', 'instance', $assignment->id)) { + if ($event->id = $DB->get_field('event', 'id', array('modulename'=>'assignment', 'instance'=>$assignment->id))) { update_event($event); } else { @@ -2368,7 +2372,7 @@ function assignment_refresh_events($courseid = 0) { $event->instance = $assignment->id; $event->eventtype = 'due'; $event->timeduration = 0; - $event->visible = get_field('course_modules', 'visible', 'module', $moduleid, 'instance', $assignment->id); + $event->visible = $DB->get_field('course_modules', 'visible', array('module'=>$moduleid, 'instance'=>$assignment->id)); add_event($event); } @@ -2382,21 +2386,21 @@ function assignment_refresh_events($courseid = 0) { * This is used by the recent activity block */ function assignment_print_recent_activity($course, $viewfullnames, $timestart) { - global $CFG, $USER; + global $CFG, $USER, $DB; // do not use log table if possible, it may be huge if (!$submissions = get_records_sql("SELECT asb.id, asb.timemodified, cm.id AS cmid, asb.userid, u.firstname, u.lastname, u.email, u.picture - FROM {$CFG->prefix}assignment_submissions asb - JOIN {$CFG->prefix}assignment a ON a.id = asb.assignment - JOIN {$CFG->prefix}course_modules cm ON cm.instance = a.id - JOIN {$CFG->prefix}modules md ON md.id = cm.module - JOIN {$CFG->prefix}user u ON u.id = asb.userid - WHERE asb.timemodified > $timestart AND - a.course = {$course->id} AND + FROM {assignment_submissions} asb + JOIN {assignment} a ON a.id = asb.assignment + JOIN {course_modules} cm ON cm.instance = a.id + JOIN {modules} md ON md.id = cm.module + JOIN {user} u ON u.id = asb.userid + WHERE asb.timemodified > ? AND + a.course = ? AND md.name = 'assignment' - ORDER BY asb.timemodified ASC")) { + ORDER BY asb.timemodified ASC", array($timestart, $course->id))) { return false; } @@ -2475,42 +2479,47 @@ function assignment_print_recent_activity($course, $viewfullnames, $timestart) { * Returns all assignments since a given time in specified forum. */ function assignment_get_recent_mod_activity(&$activities, &$index, $timestart, $courseid, $cmid, $userid=0, $groupid=0) { - - global $CFG, $COURSE, $USER; + global $CFG, $COURSE, $USER, $DB; if ($COURSE->id == $courseid) { $course = $COURSE; } else { - $course = get_record('course', 'id', $courseid); + $course = $DB->get_record('course', array('id'=>$courseid)); } $modinfo =& get_fast_modinfo($course); $cm = $modinfo->cms[$cmid]; + $params = array(); if ($userid) { - $userselect = "AND u.id = $userid"; + $userselect = "AND u.id = :userid"; + $params['userid'] = $userid; } else { $userselect = ""; } if ($groupid) { - $groupselect = "AND gm.groupid = $groupid"; - $groupjoin = "JOIN {$CFG->prefix}groups_members gm ON gm.userid=u.id"; + $groupselect = "AND gm.groupid = :groupid"; + $groupjoin = "JOIN {groups_members} gm ON gm.userid=u.id"; + $params['groupid'] = $groupid; } else { $groupselect = ""; $groupjoin = ""; } - if (!$submissions = get_records_sql("SELECT asb.id, asb.timemodified, asb.userid, - u.firstname, u.lastname, u.email, u.picture - FROM {$CFG->prefix}assignment_submissions asb - JOIN {$CFG->prefix}assignment a ON a.id = asb.assignment - JOIN {$CFG->prefix}user u ON u.id = asb.userid - $groupjoin - WHERE asb.timemodified > $timestart AND a.id = $cm->instance - $userselect $groupselect - ORDER BY asb.timemodified ASC")) { + $params['cminstance'] = $cm->instance; + $params['timestart'] = $timestart; + + if (!$submissions = $DB->get_records_sql("SELECT asb.id, asb.timemodified, asb.userid, + u.firstname, u.lastname, u.email, u.picture + FROM {assignment_submissions} asb + JOIN {assignment} a ON a.id = asb.assignment + JOIN {user} u ON u.id = asb.userid + $groupjoin + WHERE asb.timemodified > :timestart AND a.id = :cminstance + $userselect $groupselect + ORDER BY asb.timemodified ASC", $params)) { return; } @@ -2646,12 +2655,11 @@ function assignment_print_recent_mod_activity($activity, $courseid, $detail, $mo * @return array with assignment name and user firstname and lastname */ function assignment_log_info($log) { - global $CFG; - return get_record_sql("SELECT a.name, u.firstname, u.lastname - FROM {$CFG->prefix}assignment a, - {$CFG->prefix}user u - WHERE a.id = '$log->info' - AND u.id = '$log->userid'"); + global $CFG, $DB; + + return $DB->get_record_sql("SELECT a.name, u.firstname, u.lastname + FROM {assignment} a, {user} u + WHERE a.id = ? AND u.id = ?", array($log->info, $log->userid)); } /** @@ -2660,28 +2668,15 @@ function assignment_log_info($log) { * @return array */ function assignment_get_unmailed_submissions($starttime, $endtime) { + global $CFG, $DB; - global $CFG; - - return get_records_sql("SELECT s.*, a.course, a.name - FROM {$CFG->prefix}assignment_submissions s, - {$CFG->prefix}assignment a - WHERE s.mailed = 0 - AND s.timemarked <= $endtime - AND s.timemarked >= $starttime - AND s.assignment = a.id"); - - /* return get_records_sql("SELECT s.*, a.course, a.name - FROM {$CFG->prefix}assignment_submissions s, - {$CFG->prefix}assignment a, - {$CFG->prefix}user_students us - WHERE s.mailed = 0 - AND s.timemarked <= $endtime - AND s.timemarked >= $starttime - AND s.assignment = a.id - AND s.userid = us.userid - AND a.course = us.course"); - */ + return $DB->get_records_sql("SELECT s.*, a.course, a.name + FROM {assignment_submissions} s, + {assignment} a + WHERE s.mailed = 0 + AND s.timemarked <= ? + AND s.timemarked >= ? + AND s.assignment = a.id", array($endtime, $starttime)); } /** @@ -2757,15 +2752,6 @@ function assignment_get_all_submissions($assignment, $sort="", $dir="DESC") { AND a.assignment = '$assignment->id' ORDER BY $sort"); - /* return get_records_sql("SELECT a.* - FROM {$CFG->prefix}assignment_submissions a, - {$CFG->prefix}user_students s, - {$CFG->prefix}user u - WHERE a.userid = s.userid - AND u.id = a.userid - AND $select a.assignment = '$assignment->id' - ORDER BY $sort"); - */ } /** -- 2.39.5