Esempio n. 1
0
 /**
  * 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;
}
Esempio n. 3
0
 /**
  * @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;
 }