Example #1
0
 public function save_question($question, $form)
 {
     // Make very sure that descriptions can'e be created with a grade of
     // anything other than 0.
     $form->defaultmark = 0;
     return parent::save_question($question, $form);
 }
 public function save_question_options($question)
 {
     global $DB;
     $result = new stdClass();
     $context = $question->context;
     $question->feedbackperconditions = rtrim(str_replace("\r\n", "\n", $question->feedbackperconditions), "\n");
     $question->conditions = rtrim(str_replace("\r\n", "\n", $question->conditions), "\n");
     $parentresult = parent::save_question_options($question);
     if ($parentresult !== null) {
         // Parent function returns null if all is OK
         return $parentresult;
     }
     $this->save_hints($question);
     return $parentresult;
 }
Example #3
0
 function export_to_xml($question, qformat_xml $format, $extra = null)
 {
     global $COURSE;
     if ($extra !== null) {
         throw new coding_exception("coderunner:export_to_xml: Unexpected parameter");
     }
     // Copy the question so we can modify it for export
     // (Just in case the original gets used elsewhere).
     $questiontoexport = clone $question;
     $qtype = $question->options->coderunnertype;
     $coursecontext = context_course::instance($COURSE->id);
     $row = self::get_prototype($qtype, $coursecontext);
     // Clear all inherited fields equal in value to the corresponding Prototype field
     // (but only if this is not a prototype question itself)
     if ($questiontoexport->options->prototypetype == 0) {
         $noninheritedfields = $this->noninherited_fields();
         $extrafields = $this->extra_question_fields();
         foreach ($row as $field => $value) {
             if (in_array($field, $extrafields) && !in_array($field, $noninheritedfields) && $question->options->{$field} === $value) {
                 $questiontoexport->options->{$field} = null;
             }
         }
     }
     $expout = parent::export_to_xml($questiontoexport, $format, $extra);
     $expout .= "    <testcases>\n";
     foreach ($question->options->testcases as $testcase) {
         $useasexample = $testcase->useasexample ? 1 : 0;
         $hiderestiffail = $testcase->hiderestiffail ? 1 : 0;
         $mark = sprintf("%.7f", $testcase->mark);
         $expout .= "      <testcase useasexample=\"{$useasexample}\" hiderestiffail=\"{$hiderestiffail}\" mark=\"{$mark}\" >\n";
         foreach (array('testcode', 'stdin', 'expected', 'extra', 'display') as $field) {
             $exportedValue = $format->writetext($testcase->{$field}, 4);
             $expout .= "      <{$field}>\n        {$exportedValue}      </{$field}>\n";
         }
         $expout .= "    </testcase>\n";
     }
     // Add datafiles within the scope of the <testcases> element
     $fs = get_file_storage();
     $contextid = $question->contextid;
     $datafiles = $fs->get_area_files($contextid, 'qtype_coderunner', 'datafile', $question->id);
     $expout .= $format->write_files($datafiles);
     $expout .= "    </testcases>\n";
     return $expout;
 }
Example #4
0
 public function save_question($question, $form) {
     $form->name = '';
     // Name is not a required field for random questions, but
     // parent::save_question Assumes that it is.
     return parent::save_question($question, $form);
 }
 /**
  * Initialise the common question_definition fields.
  * 
  * @param question_definition $question the question_definition we are creating.
  * @param object $questiondata the question data loaded from the database.
  */
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->rows = $questiondata->options->rows;
     $question->cols = $questiondata->options->cols;
     $question->weights = $questiondata->options->weights;
     $question->grademethod = $questiondata->options->grademethod;
     $question->multiple = $questiondata->options->multiple;
 }
 protected function delete_files($questionid, $contextid)
 {
     $fs = get_file_storage();
     parent::delete_files($questionid, $contextid);
     $this->delete_files_in_answers($questionid, $contextid, true);
     $fs->delete_area_files($contextid, 'question', 'correctfeedback', $questionid);
     $fs->delete_area_files($contextid, 'question', 'incorrectfeedback', $questionid);
 }
Example #7
0
    protected function delete_files($questionid, $contextid) {
        global $DB;
        $fs = get_file_storage();

        parent::delete_files($questionid, $contextid);

        $subquestionids = $DB->get_records_menu('question_match_sub',
                array('question' => $questionid), 'id', 'id,1');
        foreach ($subquestionids as $subquestionid => $notused) {
            $fs->delete_area_files($contextid, 'qtype_match', 'subquestion', $subquestionid);
        }

        $this->delete_files_in_combined_feedback($questionid, $contextid);
    }
Example #8
0
 public function save_question($question, $form)
 {
     $form->name = '';
     // In case someone set the question text to true/false in the old style, set it properly.
     if ($form->questiontext['text']) {
         $form->questiontext['text'] = '1';
     } else {
         $form->questiontext['text'] = '0';
     }
     $form->tags = array();
     // Name is not a required field for random questions, but
     // parent::save_question Assumes that it is.
     return parent::save_question($question, $form);
 }
Example #9
0
 protected function delete_files($questionid, $contextid)
 {
     global $DB;
     $fs = get_file_storage();
     parent::delete_files($questionid, $contextid);
 }
Example #10
0
 public function make_question($questiondata)
 {
     $question = parent::make_question($questiondata);
     $question->questiontext = html_writer::tag('div', get_string('missingqtypewarning', 'qtype_missingtype'), array('class' => 'warning missingqtypewarning')) . $question->questiontext;
     return $question;
 }
 public function save_question($question, $form)
 {
     $form->name = '';
     $form->questiontextformat = FORMAT_MOODLE;
     $form->tags = array();
     // Name is not a required field for random questions, but
     // parent::save_question Assumes that it is.
     return parent::save_question($question, $form);
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     // TODO.
     parent::initialise_question_instance($question, $questiondata);
 }
 protected function delete_files($questionid, $contextid)
 {
     global $DB;
     $fs = get_file_storage();
     parent::delete_files($questionid, $contextid);
     $subquestionids = $DB->get_records_menu('question_order_sub', array('question' => $questionid), 'id', 'id,1');
     foreach ($subquestionids as $subquestionid => $notused) {
         $fs->delete_area_files($contextid, 'qtype_order', 'subquestion', $subquestionid);
     }
     $fs->delete_area_files($contextid, 'qtype_multichoice', 'correctfeedback', $questionid);
     $fs->delete_area_files($contextid, 'qtype_multichoice', 'partiallycorrectfeedback', $questionid);
     $fs->delete_area_files($contextid, 'qtype_multichoice', 'incorrectfeedback', $questionid);
 }
Example #14
0
 protected function delete_files($questionid, $contextid)
 {
     parent::delete_files($questionid, $contextid);
     $fs = get_file_storage();
     $fs->delete_area_files($contextid, 'qtype_javaunittest', 'graderinfo', $questionid);
 }
Example #15
0
 protected function delete_files($questionid, $contextid)
 {
     parent::delete_files($questionid, $contextid);
     $this->delete_files_in_hints($questionid, $contextid);
 }
 public function export_to_xml($question, qformat_xml $format, $extra = null)
 {
     $output = parent::export_to_xml($question, $format);
     $output .= '    <delimitchars>' . $question->options->delimitchars . "</delimitchars>\n";
     $output .= '    <answerdisplay>' . $question->options->answerdisplay . "</answerdisplay>\n";
     $output .= '    <casesensitive>' . $question->options->casesensitive . "</casesensitive>\n";
     $output .= '    <noduplicates>' . $question->options->casesensitive . "</noduplicates>\n";
     $output .= $format->write_combined_feedback($question->options, $question->id, $question->contextid);
     return $output;
 }
Example #17
0
 public function delete_question($questionid, $contextid)
 {
     global $DB;
     $DB->delete_records('question_randomsamatch', array('question' => $questionid));
     parent::delete_question($questionid, $contextid);
 }
 public function delete_question($questionid, $contextid)
 {
     global $DB;
     $DB->delete_records('qtype_ordering_options', array('questionid' => $questionid));
     parent::delete_question($questionid, $contextid);
 }
Example #19
0
    protected function initialise_question_instance(question_definition $question, $questiondata) {
        question_type::initialise_question_instance($question, $questiondata);

        $question->shuffleanswers = $questiondata->options->shuffleanswers;
        $question->answernumbering = $questiondata->options->answernumbering;
        if (!empty($questiondata->options->layout)) {
            $question->layout = $questiondata->options->layout;
        } else {
            $question->layout = qtype_multichoice_single_question::LAYOUT_VERTICAL;
        }

        $question->synchronised = $questiondata->options->synchronize;

        $this->initialise_combined_feedback($question, $questiondata, true);
        $this->initialise_question_answers($question, $questiondata);

        foreach ($questiondata->options->answers as $a) {
            $question->answers[$a->id]->correctanswerlength = $a->correctanswerlength;
            $question->answers[$a->id]->correctanswerformat = $a->correctanswerformat;
        }

        $question->datasetloader = new qtype_calculated_dataset_loader($questiondata->id);
    }
 /**
  * Add styles.css to the page's header
  */
 function get_html_head_contributions(&$question, &$state)
 {
     return parent::get_html_head_contributions($question, $state);
 }
Example #21
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $availablesaquestions = $this->get_available_saquestions_from_category($question->category, $questiondata->options->subcats);
     $question->shufflestems = false;
     $question->stems = array();
     $question->choices = array();
     $question->right = array();
     $this->initialise_combined_feedback($question, $questiondata);
     $question->questionsloader = new qtype_randomsamatch_question_loader($availablesaquestions, $questiondata->options->choose);
 }
Example #22
0
 protected function delete_files($questionid, $contextid) {
     parent::delete_files($questionid, $contextid);
     $this->delete_files_in_answers($questionid, $contextid, true);
     $this->delete_files_in_combined_feedback($questionid, $contextid);
 }
Example #23
0
 protected function initialise_question_instance($question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $bits = preg_split('/\\{#(\\d+)\\}/', $question->questiontext, null, PREG_SPLIT_DELIM_CAPTURE);
     $question->textfragments[0] = array_shift($bits);
     $i = 1;
     while (!empty($bits)) {
         $question->places[$i] = array_shift($bits);
         $question->textfragments[$i] = array_shift($bits);
         $i += 1;
     }
     foreach ($questiondata->options->questions as $key => $subqdata) {
         $subqdata->contextid = $questiondata->contextid;
         $question->subquestions[$key] = question_bank::make_question($subqdata);
         $question->subquestions[$key]->maxmark = $subqdata->defaultmark;
         if (isset($subqdata->options->layout)) {
             $question->subquestions[$key]->layout = $subqdata->options->layout;
         }
     }
 }
 protected function delete_files($questionid, $contextid)
 {
     global $DB;
     $fs = get_file_storage();
     parent::delete_files($questionid, $contextid);
     $this->delete_files_in_hints($questionid, $contextid);
     $fs->delete_area_files($contextid, 'qtype_stack', 'specificfeedback', $questionid);
     $fs->delete_area_files($contextid, 'qtype_stack', 'prtcorrect', $questionid);
     $fs->delete_area_files($contextid, 'qtype_stack', 'prtpartiallycorrect', $questionid);
     $fs->delete_area_files($contextid, 'qtype_stack', 'prtincorrect', $questionid);
     $nodeids = $DB->get_records_menu('qtype_stack_prt_nodes', array('questionid' => $questionid), 'id', 'id,1');
     foreach ($nodeids as $nodeid => $notused) {
         $fs->delete_area_files($oldcontextid, $newcontextid, 'qtype_stack', 'prtnodetruefeedback', $nodeid);
         $fs->delete_area_files($oldcontextid, $newcontextid, 'qtype_stack', 'prtnodefalsefeedback', $nodeid);
     }
 }
 protected function delete_files($questionid, $contextid)
 {
     parent::delete_files($questionid, $contextid);
     $fs = get_file_storage();
     $fs->delete_area_files($contextid, 'qtype_poodllrecording', 'graderinfo', $questionid);
 }
Example #26
0
 public function delete_question($questionid, $contextid)
 {
     global $DB;
     $DB->delete_records('qtype_' . $this->name(), array('questionid' => $questionid));
     $DB->delete_records('qtype_' . $this->name() . '_drags', array('questionid' => $questionid));
     $DB->delete_records('qtype_' . $this->name() . '_drops', array('questionid' => $questionid));
     return parent::delete_question($questionid, $contextid);
 }
Example #27
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $this->initialise_question_answers($question, $questiondata);
 }
Example #28
0
/**
 * Private function used by the preceding one.
 * @param question_type $qtype the question type.
 */
function print_qtype_to_add_option($qtype) {
    echo '<div class="qtypeoption">' . "\n";
    echo '<label for="' . $qtype->plugin_name() . '">';
    echo '<input type="radio" name="qtype" id="' . $qtype->plugin_name() .
            '" value="' . $qtype->name() . '" />';
    echo '<span class="qtypename">';
    $fakequestion = new stdClass();
    $fakequestion->qtype = $qtype->name();
    echo print_question_icon($fakequestion);
    echo $qtype->menu_name() . '</span><span class="qtypesummary">' .
            get_string('pluginnamesummary', $qtype->plugin_name());
    echo "</span></label>\n";
    echo "</div>\n";
}
Example #29
0
 protected function delete_files($questionid, $contextid)
 {
     $fs = get_file_storage();
     parent::delete_files($questionid, $contextid);
     $this->delete_files_in_answers($questionid, $contextid);
     $this->delete_files_in_hints($questionid, $contextid);
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->usecase = $questiondata->options->usecase;
     $question->usehint = $questiondata->options->usehint;
     $question->studentshowalternate = $questiondata->options->studentshowalternate;
     $this->initialise_question_answers($question, $questiondata);
     $qid = $question->id;
 }