if (!($course = get_record("course", "id", $qcreate->course))) {
        error("Course is misconfigured");
    }
    if (!($cm = get_coursemodule_from_instance("qcreate", $qcreate->id, $course->id))) {
        error("Course Module ID was incorrect");
    }
}
$qcreate->cmidnumber = $cm->id;
$requireds = get_records('qcreate_required', 'qcreateid', $qcreate->id, 'qtype', 'qtype, no, id');
$thisurl = new moodle_url($CFG->wwwroot . '/mod/qcreate/view.php');
$thisurl->params(array('id' => $cm->id));
$modulecontext = get_context_instance(CONTEXT_MODULE, $cm->id);
//modedit.php forwards to this page after creating coursemodule record.
//this is the first chance we get to set capabilities in the newly created
//context.
qcreate_student_q_access_sync($qcreate, $modulecontext, $course);
require_login($course->id);
if (has_capability('mod/qcreate:grade', $modulecontext)) {
    redirect($CFG->wwwroot . '/mod/qcreate/edit.php?cmid=' . $cm->id);
}
/// Print the page header
$strqcreates = get_string("modulenameplural", "qcreate");
$strqcreate = get_string("modulename", "qcreate");
$navlinks = array();
$navlinks[] = array('name' => $strqcreates, 'link' => "index.php?id={$course->id}", 'type' => 'activity');
$navlinks[] = array('name' => format_string($qcreate->name), 'link' => '', 'type' => 'activityinstance');
$navigation = build_navigation($navlinks);
$headerargs = array(format_string($qcreate->name), "", $navigation, "", "", true, update_module_button($cm->id, $course->id, $strqcreate), navmenu($course, $cm));
if (!($cats = get_categories_for_contexts($modulecontext->id))) {
    //if it has not been made yet then make a default cat
    question_make_default_categories(array($modulecontext));
/**
 * Function to be run periodically according to the moodle cron
 * This function searches for things that need to be done, such
 * as sending out mail, toggling flags etc ...
 *
 * @uses $CFG
 * @return boolean
 * @todo Finish documenting this function
 **/
function qcreate_cron()
{
    global $CFG;
    $sql = "SELECT q.*, cm.id as cmidnumber, q.course as courseid\n              FROM {$CFG->prefix}qcreate q, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m\n             WHERE m.name='qcreate' AND m.id=cm.module AND cm.instance=q.id";
    $rs = get_recordset_sql($sql);
    while ($qcreate = rs_fetch_next_record($rs)) {
        $context = get_context_instance(CONTEXT_MODULE, $qcreate->cmidnumber);
        if ($users = get_users_by_capability($context, 'mod/qcreate:submit', '', '', '', '', '', '', false)) {
            $users = array_keys($users);
            $sql = 'SELECT q.* FROM  ' . $CFG->prefix . 'question_categories qc, ' . $CFG->prefix . 'question q ' . 'LEFT JOIN ' . $CFG->prefix . 'qcreate_grades g ON q.id = g.questionid ' . 'WHERE g.timemarked IS NULL AND q.createdby IN (' . implode(',', $users) . ') ' . 'AND qc.id = q.category ' . 'AND q.hidden=\'0\' AND q.parent=\'0\' ' . 'AND qc.contextid =' . $context->id;
            $questionrs = get_recordset_sql($sql);
            $toupdates = array();
            while ($question = rs_fetch_next_record($questionrs)) {
                qcreate_process_local_grade($qcreate, $question, true);
                $toupdates[] = $question->createdby;
            }
            rs_close($questionrs);
            $toupdates = array_unique($toupdates);
            foreach ($toupdates as $toupdate) {
                qcreate_update_grades($qcreate, $toupdate);
            }
        }
        qcreate_student_q_access_sync($qcreate);
    }
    rs_close($rs);
    return true;
}