Index: mod/quiz/lib.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/quiz/lib.php,v retrieving revision 1.359 diff -u -r1.359 lib.php --- mod/quiz/lib.php 19 Apr 2010 06:30:33 -0000 1.359 +++ mod/quiz/lib.php 26 Apr 2010 14:02:33 -0000 @@ -791,23 +791,11 @@ /** * Returns all quiz graded users since a given time for specified quiz - * - * @global stdClass - * @global object - * @global object - * @global object - * @uses CONTEXT_MODULE - * @param array $activities By reference - * @param int $index By reference - * @param int $timestart - * @param int $courseid - * @param int $cmid - * @param int $userid - * @param int $groupid - * @return void */ -function quiz_get_recent_mod_activity(&$activities, &$index, $timestart, $courseid, $cmid, $userid=0, $groupid=0) { +function quiz_get_recent_mod_activity(&$activities, &$index, $timestart, + $courseid, $cmid, $userid = 0, $groupid = 0) { global $CFG, $COURSE, $USER, $DB; + require_once('locallib.php'); if ($COURSE->id == $courseid) { $course = $COURSE; @@ -818,85 +806,105 @@ $modinfo =& get_fast_modinfo($course); $cm = $modinfo->cms[$cmid]; - - $params = array($timestart, $cm->instance); + $quiz = $DB->get_record('quiz', array('id' => $cm->instance)); if ($userid) { - $userselect = "AND u.id = ?"; - $params[] = $userid; + $userselect = "AND u.id = :userid"; + $params['userid'] = $userid; } else { - $userselect = ""; + $userselect = ''; } if ($groupid) { - $groupselect = "AND gm.groupid = ?"; - $groupjoin = "JOIN {groups_members} gm ON gm.userid=u.id"; - $params[] = $groupid; + $groupselect = 'AND gm.groupid = :groupid'; + $groupjoin = 'JOIN {groups_members} gm ON gm.userid=u.id'; + $params['groupid'] = $groupid; } else { - $groupselect = ""; - $groupjoin = ""; + $groupselect = ''; + $groupjoin = ''; } - if (!$attempts = $DB->get_records_sql("SELECT qa.*, q.sumgrades AS maxgrade, - u.firstname, u.lastname, u.email, u.picture - FROM {quiz_attempts} qa - JOIN {quiz} q ON q.id = qa.quiz - JOIN {user} u ON u.id = qa.userid - $groupjoin - WHERE qa.timefinish > $timestart AND q.id = $cm->instance - $userselect $groupselect - ORDER BY qa.timefinish ASC", $params)) { - return; - } - - $cm_context = get_context_instance(CONTEXT_MODULE, $cm->id); - $grader = has_capability('moodle/grade:viewall', $cm_context); - $accessallgroups = has_capability('moodle/site:accessallgroups', $cm_context); - $viewfullnames = has_capability('moodle/site:viewfullnames', $cm_context); - $grader = has_capability('mod/quiz:grade', $cm_context); + $params = array( + 'timestart' => $timestart, + 'quizid' => $quiz->id + ); + if (!$attempts = $DB->get_records_sql(" + SELECT qa.*, + u.firstname, u.lastname, u.email, u.picture, u.imagealt + FROM {quiz_attempts} qa + JOIN {user} u ON u.id = qa.userid + $groupjoin + WHERE qa.timefinish > :timestart + AND qa.quiz = :quizid + AND qa.preview = 0 + $userselect + $groupselect + ORDER BY qa.timefinish ASC", $params)) { + return; + } + + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + $grader = has_capability('moodle/grade:viewall', $context); + $accessallgroups = has_capability('moodle/site:accessallgroups', $context); + $viewfullnames = has_capability('moodle/site:viewfullnames', $context); + $grader = has_capability('mod/quiz:grade', $context); $groupmode = groups_get_activity_groupmode($cm, $course); if (is_null($modinfo->groups)) { $modinfo->groups = groups_get_user_groups($course->id); // load all my groups and cache it in modinfo } + $usersgroups = null; $aname = format_string($cm->name,true); foreach ($attempts as $attempt) { if ($attempt->userid != $USER->id) { if (!$grader) { - // grade permission required + // Grade permission required continue; } if ($groupmode == SEPARATEGROUPS and !$accessallgroups) { - $usersgroups = groups_get_all_groups($course->id, $attempt->userid, $cm->groupingid); - if (!is_array($usersgroups)) { - continue; + if (is_null($usersgroups)) { + $usersgroups = groups_get_all_groups($course->id, + $attempt->userid, $cm->groupingid); + if (is_array($usersgroups)) { + $usersgroups = array_keys($usersgroups); + } else { + $usersgroups = array(); + } } - $usersgroups = array_keys($usersgroups); - $interset = array_intersect($usersgroups, $modinfo->groups[$cm->id]); - if (empty($intersect)) { + if (!array_intersect($usersgroups, $modinfo->groups[$cm->id])) { continue; } } - } + } - $tmpactivity = new object(); + $options = quiz_get_reviewoptions($quiz, $attempt, $context); - $tmpactivity->type = 'quiz'; - $tmpactivity->cmid = $cm->id; - $tmpactivity->name = $aname; - $tmpactivity->sectionnum= $cm->sectionnum; - $tmpactivity->timestamp = $attempt->timefinish; + $tmpactivity = new stdClass; + + $tmpactivity->type = 'quiz'; + $tmpactivity->cmid = $cm->id; + $tmpactivity->name = $aname; + $tmpactivity->sectionnum = $cm->sectionnum; + $tmpactivity->timestamp = $attempt->timefinish; $tmpactivity->content->attemptid = $attempt->id; - $tmpactivity->content->sumgrades = $attempt->sumgrades; - $tmpactivity->content->maxgrade = $attempt->maxgrade; $tmpactivity->content->attempt = $attempt->attempt; + if (quiz_has_grades($quiz) && $options->scores) { + $tmpactivity->content->sumgrades = quiz_format_grade($quiz, $attempt->sumgrades); + $tmpactivity->content->maxgrade = quiz_format_grade($quiz, $quiz->sumgrades); + } else { + $tmpactivity->content->sumgrades = null; + $tmpactivity->content->maxgrade = null; + } - $tmpactivity->user->userid = $attempt->userid; + $tmpactivity->user->id = $attempt->id; + $tmpactivity->user->firstname = $attempt->firstname; + $tmpactivity->user->lastname = $attempt->lastname; $tmpactivity->user->fullname = fullname($attempt, $viewfullnames); $tmpactivity->user->picture = $attempt->picture; + $tmpactivity->user->imagealt = $attempt->imagealt; $activities[$index++] = $tmpactivity; } @@ -904,44 +912,41 @@ return; } -/** - * @global stdClass - * @param object $activity - * @param int $courseid - * @param bool $detail - * @param array $modnames - * @return void output is echo'd - */ function quiz_print_recent_mod_activity($activity, $courseid, $detail, $modnames) { global $CFG, $OUTPUT; echo ''; - echo "
"; - echo $OUTPUT->user_picture($activity->user, array('courseid'=>$courseid)); - echo ""; + echo '
'; + echo $OUTPUT->user_picture($activity->user, array('courseid' => $courseid)); + echo ''; if ($detail) { $modname = $modnames[$activity->type]; echo '
'; - echo "pix_url('icon', $activity->type) . "\" ". - "class=\"icon\" alt=\"$modname\" />"; - echo "wwwroot/mod/quiz/view.php?id={$activity->cmid}\">{$activity->name}"; + echo '' . $modname . ''; + echo '' . $activity->name . ''; echo '
'; } echo '
'; - echo get_string("attempt", "quiz")." {$activity->content->attempt}: "; - $grades = "({$activity->content->sumgrades} / {$activity->content->maxgrade})"; - echo "wwwroot/mod/quiz/review.php?attempt={$activity->content->attemptid}\">$grades"; + echo get_string('attempt', 'quiz', $activity->content->attempt); + if (isset($activity->content->maxgrade)) { + $grades = $activity->content->sumgrades . ' / ' . $activity->content->maxgrade; + echo ': (' . $grades . ')'; + } echo '
'; echo '
'; - echo "wwwroot/user/view.php?id={$activity->user->userid}&course=$courseid\">" - ."{$activity->user->fullname} - ".userdate($activity->timestamp); + echo '' . $activity->user->fullname . + ' - ' . userdate($activity->timestamp); echo '
'; - echo "
"; + echo ''; return; }