'. $message .'
'; echo $OUTPUT->container_start('buttons'); echo $OUTPUT->single_button($regrade_link, get_string('regradeanyway', 'grades')); echo $OUTPUT->single_button($back_link, get_string('cancel')); echo $OUTPUT->container_end(); echo $OUTPUT->box_end(); } return GRADE_UPDATE_ITEM_LOCKED; } } } return grade_update('mod/quiz', $quiz->course, 'mod', 'quiz', $quiz->id, 0, $grades, $params); } /** * Delete grade item for given quiz * * @category grade * @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)); } /** * This standard function will check all instances of this module * and make sure there are up-to-date events created for each of them. * If courseid = 0, then every quiz event in the site is checked, else * only quiz events belonging to the course specified are checked. * This function is used, in its new format, by restore_refresh_events() * * @param int $courseid * @param int|stdClass $instance Quiz module instance or ID. * @param int|stdClass $cm Course module object or ID (not used in this module). * @return bool */ function quiz_refresh_events($courseid = 0, $instance = null, $cm = null) { global $DB; // If we have instance information then we can just update the one event instead of updating all events. if (isset($instance)) { if (!is_object($instance)) { $instance = $DB->get_record('quiz', array('id' => $instance), '*', MUST_EXIST); } quiz_update_events($instance); return true; } if ($courseid == 0) { if (!$quizzes = $DB->get_records('quiz')) { return true; } } else { if (!$quizzes = $DB->get_records('quiz', array('course' => $courseid))) { return true; } } foreach ($quizzes as $quiz) { quiz_update_events($quiz); } return true; } /** * Returns all quiz graded users since a given time for specified quiz */ function quiz_get_recent_mod_activity(&$activities, &$index, $timestart, $courseid, $cmid, $userid = 0, $groupid = 0) { global $CFG, $USER, $DB; require_once($CFG->dirroot . '/mod/quiz/locallib.php'); $course = get_course($courseid); $modinfo = get_fast_modinfo($course); $cm = $modinfo->cms[$cmid]; $quiz = $DB->get_record('quiz', array('id' => $cm->instance)); if ($userid) { $userselect = "AND u.id = :userid"; $params['userid'] = $userid; } else { $userselect = ''; } if ($groupid) { $groupselect = 'AND gm.groupid = :groupid'; $groupjoin = 'JOIN {groups_members} gm ON gm.userid=u.id'; $params['groupid'] = $groupid; } else { $groupselect = ''; $groupjoin = ''; } $params['timestart'] = $timestart; $params['quizid'] = $quiz->id; $userfieldsapi = \core_user\fields::for_userpic(); $ufields = $userfieldsapi->get_sql('u', false, '', 'useridagain', false)->selects; if (!$attempts = $DB->get_records_sql(" SELECT qa.*, {$ufields} 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 = context_module::instance($cm->id); $accessallgroups = has_capability('moodle/site:accessallgroups', $context); $viewfullnames = has_capability('moodle/site:viewfullnames', $context); $grader = has_capability('mod/quiz:viewreports', $context); $groupmode = groups_get_activity_groupmode($cm, $course); $usersgroups = null; $aname = format_string($cm->name, true); foreach ($attempts as $attempt) { if ($attempt->userid != $USER->id) { if (!$grader) { // Grade permission required. continue; } if ($groupmode == SEPARATEGROUPS and !$accessallgroups) { $usersgroups = groups_get_all_groups($course->id, $attempt->userid, $cm->groupingid); $usersgroups = array_keys($usersgroups); if (!array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid))) { continue; } } } $options = quiz_get_review_options($quiz, $attempt, $context); $tmpactivity = new stdClass(); $tmpactivity->type = 'quiz'; $tmpactivity->cmid = $cm->id; $tmpactivity->name = $aname; $tmpactivity->sectionnum = $cm->sectionnum; $tmpactivity->timestamp = $attempt->timefinish; $tmpactivity->content = new stdClass(); $tmpactivity->content->attemptid = $attempt->id; $tmpactivity->content->attempt = $attempt->attempt; if (quiz_has_grades($quiz) && $options->marks >= question_display_options::MARK_AND_MAX) { $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 = user_picture::unalias($attempt, null, 'useridagain'); $tmpactivity->user->fullname = fullname($tmpactivity->user, $viewfullnames); $activities[$index++] = $tmpactivity; } } function quiz_print_recent_mod_activity($activity, $courseid, $detail, $modnames) { global $CFG, $OUTPUT; echo '| '; echo $OUTPUT->user_picture($activity->user, array('courseid' => $courseid)); echo ' | ';
if ($detail) {
$modname = $modnames[$activity->type];
echo ' ';
echo $OUTPUT->image_icon('monologo', $modname, $activity->type);
echo '' . $activity->name . '';
echo ' ';
}
echo '';
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 '' . $activity->user->fullname .
' - ' . userdate($activity->timestamp);
echo ' ';
echo ' |