public function display($offlinequiz, $cm, $course) { global $CFG, $OUTPUT, $DB; $confirm = optional_param('confirm', 0, PARAM_INT); raise_memory_limit(MEMORY_EXTRA); // Print header. $this->print_header_and_tabs($cm, $course, $offlinequiz, 'regrade'); offlinequiz_load_useridentification(); $offlinequizconfig = get_config('offlinequiz'); $letterstr = 'ABCDEFGHIJKL'; // Print heading. echo $OUTPUT->box_start('linkbox'); echo $OUTPUT->heading(format_string($offlinequiz->name)); echo $OUTPUT->heading(get_string('regradingquiz', 'offlinequiz')); echo $OUTPUT->box_end('linkbox'); // Fetch all results. $ressql = "SELECT res.*, u.{$offlinequizconfig->ID_field}\n FROM {offlinequiz_results} res\n JOIN {user} u on u.id = res.userid\n WHERE res.offlinequizid = :offlinequizid\n AND res.status = 'complete'"; $resparams = array('offlinequizid' => $offlinequiz->id); if (!($results = $DB->get_records_sql($ressql, $resparams))) { $url = new moodle_url('/mod/offlinequiz/report.php', array('id' => $cm->id)); $url->param('mode', 'overview'); echo $OUTPUT->heading(get_string('noresults', 'offlinequiz')); echo $OUTPUT->box_start('linkbox'); echo $OUTPUT->continue_button($url); echo $OUTPUT->box_end('linkbox'); return true; } // If we don't have a confirmation we only display the confirm and cancel buttons. if (!$confirm) { echo $OUTPUT->box_start('linkbox'); echo $OUTPUT->notification(get_string('regradedisplayexplanation', 'offlinequiz'), 'notifyproblem'); echo '<br/>'; $url = new moodle_url('/mod/offlinequiz/report.php', array('id' => $cm->id)); $url->param('mode', 'regrade'); $url->param('confirm', 1); echo $OUTPUT->single_button($url, get_string('reallyregrade', 'offlinequiz_regrade')); echo '<br/>'; $url = new moodle_url('/mod/offlinequiz/report.php', array('id' => $cm->id)); $url->param('mode', 'overview'); echo $OUTPUT->single_button($url, get_string('cancel')); echo $OUTPUT->box_end('linkbox'); return true; } // Fetch all groups. if ($groups = $DB->get_records('offlinequiz_groups', array('offlinequizid' => $offlinequiz->id), 'number', '*', 0, $offlinequiz->numgroups)) { foreach ($groups as $group) { $sumgrade = offlinequiz_update_sumgrades($offlinequiz, $group->id); $groupletter = $letterstr[$group->number - 1]; $a = new StdClass(); $a->letter = $groupletter; $a->grade = round($sumgrade, $offlinequiz->decimalpoints); echo $OUTPUT->notification(get_string('updatedsumgrades', 'offlinequiz', $a), 'notifysuccess'); } } // Options for the popup_action. $options = array(); $options['height'] = 1024; // Optional. $options['width'] = 860; // Optional. $options['resizable'] = false; $saveresult = false; // Loop through all results and regrade while printing progress info. foreach ($results as $result) { set_time_limit(120); $sql = "SELECT ogq.questionid, ogq.maxmark \n FROM {offlinequiz_group_questions} ogq\n WHERE ogq.offlinequizid = :offlinequizid\n AND ogq.offlinegroupid = :offlinegroupid"; $params = array('offlinequizid' => $offlinequiz->id, 'offlinegroupid' => $result->offlinegroupid); if (!($questions = $DB->get_records_sql($sql, $params))) { print_error("Failed to get questions for regrading!"); } $user = $DB->get_record('user', array('id' => $result->userid)); echo '<strong>' . get_string('regradingresult', 'offlinequiz', $user->{$offlinequizconfig->ID_field}) . '</strong> '; $changed = $this->regrade_result($result, $questions); if ($changed) { $quba = question_engine::load_questions_usage_by_activity($result->usageid); $DB->set_field('offlinequiz_results', 'sumgrades', $quba->get_total_mark(), array('id' => $result->id)); $url = new moodle_url($CFG->wwwroot . '/mod/offlinequiz/review.php', array('resultid' => $result->id)); $title = get_string('changed', 'offlinequiz'); echo $OUTPUT->action_link($url, $title, new popup_action('click', $url, 'review' . $result->id, $options)); } else { echo get_string('done', 'offlinequiz'); } echo '<br />'; // The following makes sure that the output is sent immediately. @flush(); @ob_flush(); } // Log this action. $params = array('objectid' => $cm->id, 'context' => context_module::instance($cm->id), 'other' => array('numberofresults' => count($results), 'offlinequizid' => $offlinequiz->id)); $event = \mod_offlinequiz\event\results_regraded::create($params); $event->trigger(); $url = new moodle_url($CFG->wwwroot . '/mod/offlinequiz/report.php', array('q' => $offlinequiz->id, 'mode' => 'overview')); offlinequiz_update_grades($offlinequiz); echo $OUTPUT->box_start('linkbox'); echo $OUTPUT->single_button($url, get_string('continue'), 'get'); echo $OUTPUT->box_end('linkbox'); return true; }
list($categoryid) = explode(',', $data->category); $includesubcategories = !empty($data->includesubcategories); $returnurl->param('cat', $data->category); } else { if (!empty($data->newcategory)) { list($parentid, $contextid) = explode(',', $data->parent); $categoryid = $qcobject->add_category($data->parent, $data->name, '', true); $includesubcategories = 0; $returnurl->param('cat', $categoryid . ',' . $contextid); } else { throw new coding_exception('It seems a form was submitted without any button being pressed???'); } } offlinequiz_add_random_questions($offlinequiz, $offlinequizgroup, $categoryid, $data->numbertoadd, $includesubcategories); offlinequiz_delete_template_usages($offlinequiz); offlinequiz_update_sumgrades($offlinequiz); redirect($returnurl); } $mform->set_data(array('addonpage' => $addonpage, 'returnurl' => $returnurl, 'cmid' => $cm->id, 'category' => $category)); // Setup $PAGE. $streditingofflinequiz = get_string('editinga', 'moodle', get_string('modulename', 'offlinequiz')); $PAGE->navbar->add($streditingofflinequiz); $PAGE->set_title($streditingofflinequiz); $PAGE->set_heading($course->fullname); echo $OUTPUT->header(); if (!($offlinequizname = $DB->get_field($cm->modname, 'name', array('id' => $cm->instance)))) { print_error('invalidcoursemodule'); } $groupletters = 'ABCDEFGHIJKL'; echo $OUTPUT->heading(get_string('addrandomquestiontoofflinequiz', 'offlinequiz', array('name' => $offlinequizname, 'group' => $groupletters[$offlinequiz->groupnumber - 1])), 2); $mform->display();
$rawdata = (array) data_submitted(); foreach ($rawdata as $key => $value) { if (preg_match('!^g([0-9]+)$!', $key, $matches)) { if (is_numeric(str_replace(',', '.', $value))) { // Parse input for question -> grades. $questionid = $matches[1]; offlinequiz_update_question_instance($offlinequiz, $questionid, unformat_float($value)); } else { $bulkgradewarning = true; } } } // Redmine 983: Upgrade sumgrades for all offlinequiz groups. if ($groups = $DB->get_records('offlinequiz_groups', array('offlinequizid' => $offlinequiz->id), 'number', '*', 0, $offlinequiz->numgroups)) { foreach ($groups as $group) { $sumgrade = offlinequiz_update_sumgrades($offlinequiz, $group->id); } } offlinequiz_update_all_attempt_sumgrades($offlinequiz); offlinequiz_update_grades($offlinequiz, 0, true); redirect($afteractionurl); } // Get the question bank view. $questionbank = new mod_offlinequiz\question\bank\custom_view($contexts, $thispageurl, $course, $cm, $offlinequiz); $questionbank->set_offlinequiz_has_scanned_pages($docscreated); $questionbank->process_actions($thispageurl, $cm); // End of process commands =====================================================. $PAGE->set_pagelayout('incourse'); $PAGE->set_pagetype('mod-offlinequiz-edit'); $output = $PAGE->get_renderer('mod_offlinequiz', 'edit'); $PAGE->set_title(get_string('editingofflinequizx', 'offlinequiz', format_string($offlinequiz->name)));