/** * Create new quiz module instance. * @param array|stdClass $record * @param array $options (mostly course_module properties) * @return stdClass activity record with extra cmid field */ public function create_instance($record = null, array $options = null) { global $CFG; require_once "{$CFG->dirroot}/mod/quiz/locallib.php"; $this->instancecount++; $i = $this->instancecount; $record = (object) (array) $record; $options = (array) $options; if (empty($record->course)) { throw new coding_exception('module generator requires $record->course'); } if (isset($options['idnumber'])) { $record->cmidnumber = $options['idnumber']; } else { $record->cmidnumber = ''; } $alwaysvisible = mod_quiz_display_options::DURING | mod_quiz_display_options::IMMEDIATELY_AFTER | mod_quiz_display_options::LATER_WHILE_OPEN | mod_quiz_display_options::AFTER_CLOSE; $defaultquizsettings = array('name' => get_string('pluginname', 'data') . ' ' . $i, 'intro' => 'Test quiz ' . $i, 'introformat' => FORMAT_MOODLE, 'timeopen' => 0, 'timeclose' => 0, 'preferredbehaviour' => 'deferredfeedback', 'attempts' => 0, 'attemptonlast' => 0, 'grademethod' => QUIZ_GRADEHIGHEST, 'decimalpoints' => 2, 'questiondecimalpoints' => -1, 'reviewattempt' => $alwaysvisible, 'reviewcorrectness' => $alwaysvisible, 'reviewmarks' => $alwaysvisible, 'reviewspecificfeedback' => $alwaysvisible, 'reviewgeneralfeedback' => $alwaysvisible, 'reviewrightanswer' => $alwaysvisible, 'reviewoverallfeedback' => $alwaysvisible, 'questionsperpage' => 1, 'shufflequestions' => 0, 'shuffleanswers' => 1, 'questions' => '', 'sumgrades' => 0, 'grade' => 0, 'timecreated' => time(), 'timemodified' => time(), 'timelimit' => 0, 'overduehandling' => 'autoabandon', 'graceperiod' => 86400, 'quizpassword' => '', 'subnet' => '', 'browsersecurity' => '', 'delay1' => 0, 'delay2' => 0, 'showuserpicture' => 0, 'showblocks' => 0, 'navmethod' => QUIZ_NAVMETHOD_FREE); foreach ($defaultquizsettings as $name => $value) { if (!isset($record->{$name})) { $record->{$name} = $value; } } $record->coursemodule = $this->precreate_course_module($record->course, $options); $id = quiz_add_instance($record); return $this->post_add_instance($id, $record->coursemodule); }
function RWSAAQuiz() { global $CFG; global $DB; global $RWSLB; global $RWSUID; RWSCMAuth(); RWSCRAuth(); RWSCMUSvc(); RWSCMMaint(); $r_pm = RWSGSOpt("courseid", PARAM_ALPHANUM); if ($r_pm === false || strlen($r_pm) == 0) { RWSSErr("2057"); } $r_cid = intval($r_pm); $r_crs = RWSCMUCourse($r_cid, true); $r_si = false; $r_pm = RWSGSOpt("sectionid", PARAM_ALPHANUM); if ($r_pm !== false && strlen($r_pm) > 0) { $r_si = intval($r_pm); } if ($r_si === false) { $r_sr = 0; } else { $r_sec = $DB->get_record("course_sections", array("id" => $r_si)); if ($r_sec === false) { RWSSErr("2071"); } if ($r_sec->course != $r_cid) { RWSSErr("2072"); } $r_sr = $r_sec->section; } $r_pm = RWSGSOpt("name", PARAM_TEXT); if ($r_pm === false || strlen($r_pm) == 0) { RWSSErr("2073"); } $r_qzn = trim(clean_text(strip_tags($r_pm, "<lang><span>"))); $r_sfl = RWSGSOpt("sfile", RWSPRF); if ($r_sfl === false) { $r_sn = RWSGSOpt("sname", PARAM_FILE); $r_sd = RWSGSOpt("sdata", PARAM_NOTAGS); $r_ecd = true; } else { $r_sn = $r_sfl->filename; $r_sd = $r_sfl->filedata; $r_ecd = false; } $r_imp = false; if ($r_sd !== false && strlen($r_sd) > 0) { if ($r_sn === false || strlen($r_sn) == 0) { RWSSErr("2075"); } $r_sn = clean_filename($r_sn); $r_imp = true; } $r_mr = $DB->get_record("modules", array("name" => "quiz")); if ($r_mr === false) { RWSSErr("2074"); } $r_qiz = new stdClass(); $r_qiz->name = $r_qzn; $r_qiz->section = $r_sr; $r_qiz->course = $r_cid; $r_qiz->coursemodule = 0; $r_qiz->instance = 0; $r_qiz->id = 0; $r_qiz->modulename = $r_mr->name; $r_qiz->module = $r_mr->id; $r_qiz->groupmembersonly = 0; if (respondusws_floatcompare($CFG->version, 2011120500.0, 2) >= 0) { $r_qiz->showdescription = 0; } $r_cpl = new completion_info($r_crs); if ($r_cpl->is_enabled()) { $r_qiz->completion = COMPLETION_TRACKING_NONE; $r_qiz->completionview = COMPLETION_VIEW_NOT_REQUIRED; $r_qiz->completiongradeitemnumber = null; $r_qiz->completionexpected = 0; } if ($CFG->enableavailability) { $r_qiz->availablefrom = 0; $r_qiz->availableuntil = 0; if ($r_qiz->availableuntil) { $r_qiz->availableuntil = strtotime("23:59:59", $r_qiz->availableuntil); } $r_qiz->showavailability = CONDITION_STUDENTVIEW_HIDE; } RWSSQDefs($r_qiz); if ($r_imp) { RWSIQSet($r_qiz, $r_sn, $r_sd, $r_ecd); } if (is_null($r_qiz->quizpassword) && !is_null($r_qiz->password)) { $r_qiz->quizpassword = $r_qiz->password; } $r_qzmi = add_course_module($r_qiz); if (!$r_qzmi) { RWSSErr("2077"); } $r_qiz->coursemodule = $r_qzmi; $r_insi = quiz_add_instance($r_qiz); if (!$r_insi || is_string($r_insi)) { RWSSErr("2076"); } $r_qiz->instance = $r_insi; if (respondusws_floatcompare($CFG->version, 2012120300, 2) >= 0) { $r_siu = course_add_cm_to_section($r_qiz->course, $r_qiz->coursemodule, $r_qiz->section); } else { $r_siu = add_mod_to_section($r_qiz); } if (!$r_siu) { RWSSErr("2078"); } if (respondusws_floatcompare($CFG->version, 2012120300, 2) < 0) { $DB->set_field("course_modules", "section", $r_siu, array("id" => $r_qzmi)); } if ($r_si !== false && $r_siu != $r_si) { RWSSErr("2078"); } RWSSLBSet($r_qiz); set_coursemodule_visible($r_qzmi, $r_qiz->visible); if (isset($r_qiz->cmidnumber)) { set_coursemodule_idnumber($r_qzmi, $r_qiz->cmidnumber); } RWSUQGrades($r_qiz); if (respondusws_floatcompare($CFG->version, 2014051200, 2) >= 0) { $r_qiz->modname = $r_qiz->modulename; $r_qiz->id = $r_qiz->coursemodule; $r_evt = \core\event\course_module_created::create_from_cm($r_qiz); $r_evt->trigger(); } else { $r_evt = new stdClass(); $r_evt->modulename = $r_qiz->modulename; $r_evt->name = $r_qiz->name; $r_evt->cmid = $r_qiz->coursemodule; $r_evt->courseid = $r_qiz->course; $r_evt->userid = $RWSUID; events_trigger("mod_created", $r_evt); } rebuild_course_cache($r_cid); grade_regrade_final_grades($r_cid); RWSRHXml(); echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; echo "<addquiz>\r\n"; echo "\t<name>"; echo utf8_encode(htmlspecialchars(trim($r_qiz->name))); echo "</name>\r\n"; echo "\t<id>"; echo utf8_encode(htmlspecialchars(trim($r_qzmi))); echo "</id>\r\n"; echo "\t<section_id>"; echo utf8_encode(htmlspecialchars(trim($r_siu))); echo "</section_id>\r\n"; echo "\t<writable>yes</writable>\r\n"; if ($RWSLB->mex || $RWSLB->bex) { if ($RWSLB->mok) { if ($RWSLB->perr) { echo "\t<service_warning>3003</service_warning>\r\n"; } } else { if ($RWSLB->bok) { if ($RWSLB->perr) { echo "\t<service_warning>3003</service_warning>\r\n"; } } else { echo "\t<service_warning>3001</service_warning>\r\n"; } } } else { echo "\t<service_warning>3000</service_warning>\r\n"; } echo "</addquiz>\r\n"; exit; }
/** * @desc Read in the set and turn it into a quiz. * @param array $set The set data. * @return bool */ function insert_set_definition($set) { global $COURSE; //create new quiz object $quiz = new stdClass(); $quiz->name = $set['name']; if (isset($set['openDate'])) { $quiz->timeopen = $set['openDate']; } if (isset($set['dueDate'])) { $quiz->timeclose = $set['dueDate']; } $quiz->intro = "WeBWorK Problem Set"; $quiz->timelimitenable = 0; $quiz->quizpassword = ""; $quiz->course = $COURSE->id; $quiz->adaptive = 1; $quiz->attemptonlast = 1; $quiz->shuffleanswers = 1; $quiz->feedbackboundarycount = -1; //review variables $quiz->responsesimmediately = 1; $quiz->responsesopen = 1; $quiz->responsesclosed = 1; $quiz->scoreimmediately = 1; $quiz->scoreopen = 1; $quiz->scoreclosed = 1; $quiz->feedbackimmediately = 1; $quiz->feedbackopen = 1; $quiz->feedbackclosed = 1; $quiz->answersimmediately = 1; $quiz->answersopen = 1; $quiz->answersclosed = 1; $quiz->solutionsimmediately = 1; $quiz->solutionsopen = 1; $quiz->solutionsclosed = 1; $quiz->generalfeedbackimmediately = 1; $quiz->generalfeedbackopen = 1; $quiz->generalfeedbackclosed = 1; $quiz->questionsperpage = 1; $quiz->grade = 10; //duplicate check $dup = get_field('quiz', 'id', 'course', $quiz->course, 'name', $quiz->name); if ($dup) { echo "Already found a quiz {$quiz->name}. <br>"; return false; } $result = quiz_add_instance($quiz); if ($result == false) { echo "Error on DB addition<br>"; return false; } $quizid = $result; $numquestions = $this->insert_set_definition_questions($set['problemList'], $quizid); $quiz->sumgrades = $numquestions; $quiz->id = $quizid; $quiz->questions = get_field('quiz', 'questions', 'id', $quizid); update_record('quiz', $quiz); echo "Created Quiz (" . $quiz->name . ")<br>"; flush(); //Creating module $mod = new stdClass(); $mod->course = $COURSE->id; $mod->section = 1; $mod->module = $this->quizmodnum; $mod->instance = $quizid; $mod->modulename = 'quiz'; if (!isset($mod->name) || trim($mod->name) == '') { $mod->name = get_string("modulename", $mod->modulename); } if (!isset($mod->groupmode)) { // to deal with pre-1.5 modules $mod->groupmode = $COURSE->groupmode; /// Default groupmode the same as course } if (!($mod->coursemodule = add_course_module($mod))) { echo "Error: Could not add a new course module<br>"; return false; } if (!($sectionid = add_mod_to_section($mod))) { echo "Error: Could not add the new course module to that section<br>"; return false; } if (!set_field("course_modules", "section", $sectionid, "id", $mod->coursemodule)) { echo "Error: Could not update the course module with the correct section<br>"; return false; } if (!isset($mod->visible)) { // We get the section's visible field status $mod->visible = get_field("course_sections", "visible", "id", $sectionid); } // make sure visibility is set correctly (in particular in calendar) set_coursemodule_visible($mod->coursemodule, $mod->visible); return true; }