Пример #1
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $this->initialise_question_answers($question, $questiondata);
     $this->initialise_combined_feedback($question, $questiondata);
     $question->places = array();
     $counter = 1;
     foreach ($questiondata->options->answers as $choicedata) {
         /* fraction contains a 1 */
         if (strpos($choicedata->fraction, '1') !== false) {
             $question->places[$counter] = $choicedata->answer;
             $counter++;
         }
     }
     /* Will put empty places '' where there is no text content.
      * l for left delimiter r for right delimiter
      */
     $l = substr($question->delimitchars, 0, 1);
     $r = substr($question->delimitchars, 1, 1);
     $nonfieldregex = '/\\' . $l . '.*?\\' . $r . '/';
     $bits = preg_split($nonfieldregex, $question->questiontext, null, PREG_SPLIT_DELIM_CAPTURE);
     $question->textfragments[0] = array_shift($bits);
     $i = 1;
     while (!empty($bits)) {
         $question->textfragments[$i] = array_shift($bits);
         $i += 1;
     }
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->shufflechoices = $questiondata->options->shuffleanswers;
     $this->initialise_combined_feedback($question, $questiondata, true);
     $question->choices = array();
     $choiceindexmap = array();
     // Store the choices in arrays by group.
     foreach ($questiondata->options->drags as $dragdata) {
         $choice = $this->make_choice($dragdata);
         if (array_key_exists($choice->choice_group(), $question->choices)) {
             $question->choices[$choice->choice_group()][$dragdata->no] = $choice;
         } else {
             $question->choices[$choice->choice_group()][1] = $choice;
         }
         end($question->choices[$choice->choice_group()]);
         $choiceindexmap[$dragdata->no] = array($choice->choice_group(), key($question->choices[$choice->choice_group()]));
     }
     $question->places = array();
     $question->rightchoices = array();
     $i = 1;
     foreach ($questiondata->options->drops as $dropdata) {
         list($group, $choiceindex) = $choiceindexmap[$dropdata->choice];
         $dropdata->group = $group;
         $question->places[$dropdata->no] = $this->make_place($dropdata);
         $question->rightchoices[$dropdata->no] = $choiceindex;
     }
 }
Пример #3
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->shufflechoices = $questiondata->options->shuffleanswers;
     $this->initialise_combined_feedback($question, $questiondata, true);
     $question->choices = array();
     $choiceindexmap = array();
     // Store the choices in arrays by group.
     // This code is weird. The first choice in each group gets key 1 in the
     // $question->choices[$choice->choice_group()] array, and the others get
     // key $choice->no. Therefore you need to think carefully whether you
     // are using the key, or $choice->no. This is presumably a mistake, but
     // one that is now essentially un-fixable, since many questions of this
     // type have been attempted, and theys keys get stored in the attempt data.
     foreach ($questiondata->options->drags as $dragdata) {
         $choice = $this->make_choice($dragdata);
         if (array_key_exists($choice->choice_group(), $question->choices)) {
             $question->choices[$choice->choice_group()][$dragdata->no] = $choice;
         } else {
             $question->choices[$choice->choice_group()][1] = $choice;
         }
         end($question->choices[$choice->choice_group()]);
         $choiceindexmap[$dragdata->no] = array($choice->choice_group(), key($question->choices[$choice->choice_group()]));
     }
     $question->places = array();
     $question->rightchoices = array();
     $i = 1;
     foreach ($questiondata->options->drops as $dropdata) {
         list($group, $choiceindex) = $choiceindexmap[$dropdata->choice];
         $dropdata->group = $group;
         $question->places[$dropdata->no] = $this->make_place($dropdata);
         $question->rightchoices[$dropdata->no] = $choiceindex;
     }
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->responseformat = $questiondata->options->responseformat;
     $question->graderinfo = $questiondata->options->graderinfo;
     $question->graderinfoformat = $questiondata->options->graderinfoformat;
 }
Пример #5
0
 protected function initialise_question_instance(question_definition $question, $questiondata) {
     parent::initialise_question_instance($question, $questiondata);
     $question->responseformat = $questiondata->options->responseformat;
     $question->responsefieldlines = $questiondata->options->responsefieldlines;
     $question->attachments = $questiondata->options->attachments;
     $question->graderinfo = $questiondata->options->graderinfo;
     $question->graderinfoformat = $questiondata->options->graderinfoformat;
     $question->responselimitpolicy = $questiondata->options->responselimitpolicy;
     $question->wordlimit = $questiondata->options->wordlimit;
     $question->charlimit = $questiondata->options->charlimit;
 }
Пример #6
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->responseformat = $questiondata->options->responseformat;
     $question->responsefieldlines = $questiondata->options->responsefieldlines;
     $question->attachments = $questiondata->options->attachments;
     $question->graderinfo = $questiondata->options->graderinfo;
     $question->graderinfoformat = $questiondata->options->graderinfoformat;
     $question->responsetemplate = $questiondata->options->responsetemplate;
     $question->responsetemplateformat = $questiondata->options->responsetemplateformat;
 }
 /**
  * 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;
 }
Пример #8
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);
 }
Пример #9
0
    protected function initialise_question_instance(question_definition $question, $questiondata) {
        parent::initialise_question_instance($question, $questiondata);

        $question->shufflestems = $questiondata->options->shuffleanswers;
        $this->initialise_combined_feedback($question, $questiondata, true);

        $question->stems = array();
        $question->choices = array();
        $question->right = array();

        foreach ($questiondata->options->subquestions as $matchsub) {
            $ans = $matchsub->answertext;
            $key = array_search($matchsub->answertext, $question->choices);
            if ($key === false) {
                $key = $matchsub->id;
                $question->choices[$key] = $matchsub->answertext;
            }

            if ($matchsub->questiontext !== '') {
                $question->stems[$matchsub->id] = $matchsub->questiontext;
                $question->stemformat[$matchsub->id] = $matchsub->questiontextformat;
                $question->right[$matchsub->id] = $key;
            }
        }
    }
Пример #10
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);
    }
Пример #11
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::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->correctfeedback = $questiondata->options->correctfeedback;
     $question->correctfeedbackformat = $questiondata->options->correctfeedbackformat;
     $question->incorrectfeedback = $questiondata->options->incorrectfeedback;
     $question->incorrectfeedbackformat = $questiondata->options->incorrectfeedbackformat;
     $question->shownumcorrect = $questiondata->options->shownumcorrect;
     $this->initialise_question_answers($question, $questiondata, false);
 }
Пример #12
0
 protected function initialise_question_instance(question_definition $question, $questiondata) {
     parent::initialise_question_instance($question, $questiondata);
     $this->initialise_numerical_answers($question, $questiondata);
     $question->unitdisplay = $questiondata->options->showunits;
     $question->unitgradingtype = $questiondata->options->unitgradingtype;
     $question->unitpenalty = $questiondata->options->unitpenalty;
     $question->ap = $this->make_answer_processor($questiondata->options->units,
             $questiondata->options->unitsleft);
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     // TODO.
     parent::initialise_question_instance($question, $questiondata);
 }
Пример #14
0
 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;
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     global $DB;
     $answers = $questiondata->options->answers;
     $question->generalfeedback = $answers[$questiondata->options->answer]->feedback;
     $question->generalfeedbackformat = $answers[$questiondata->options->answer]->feedbackformat;
     $question->answerid = $questiondata->options->answer;
     //$question->rightanswer = 10;
     $getanswers = $DB->get_records('question_answers', array('question' => $question->id), 'id ASC');
     $answerval = array_shift($getanswers);
     if ($answerval) {
         $question->rightanswer = $answerval->answer;
     }
     $getanswers = $DB->get_records('question_classdiagram', array('question' => $question->id), 'id ASC');
     $answerval = array_shift($getanswers);
     if ($answerval) {
         $question->class_marks = $answerval->class_marks;
         $question->class_name_marks = $answerval->class_name_marks;
         $question->class_attribute_marks = $answerval->class_attribute_marks;
         $question->class_extra_marks = $answerval->class_extra_marks;
         $question->association_marks = $answerval->association_marks;
         $question->association_type_marks = $answerval->association_type_marks;
         $question->association_cardinality_marks = $answerval->association_cardinality_marks;
         $question->association_extra_marks = $answerval->association_extra_marks;
         $question->generalization_marks = $answerval->generalization_marks;
         $question->generalization_type_marks = $answerval->generalization_type_marks;
         $question->generalization_extra_marks = $answerval->generalization_extra_marks;
     }
 }
Пример #16
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $this->initialise_question_answers($question, $questiondata);
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->shuffleanswers = $questiondata->options->shuffleanswers;
     $question->qdifficulty = $questiondata->options->qdifficulty;
     if (!empty($questiondata->options->layout)) {
         $question->layout = $questiondata->options->layout;
     } else {
         $question->layout = qtype_turmultiplechoice_single_question::LAYOUT_VERTICAL;
     }
     $this->initialise_combined_feedback($question, $questiondata, true);
     $this->initialise_question_answers($question, $questiondata, false);
 }
Пример #18
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $answers = $questiondata->options->answers;
     if ($answers[$questiondata->options->trueanswer]->fraction > 0.99) {
         $question->rightanswer = true;
     } else {
         $question->rightanswer = false;
     }
     $question->truefeedback = $answers[$questiondata->options->trueanswer]->feedback;
     $question->falsefeedback = $answers[$questiondata->options->falseanswer]->feedback;
     $question->truefeedbackformat = $answers[$questiondata->options->trueanswer]->feedbackformat;
     $question->falsefeedbackformat = $answers[$questiondata->options->falseanswer]->feedbackformat;
     $question->trueanswerid = $questiondata->options->trueanswer;
     $question->falseanswerid = $questiondata->options->falseanswer;
 }
Пример #19
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     foreach ($questiondata->options as $field => $value) {
         if (!isset($question->{$field})) {
             $question->{$field} = $value;
         }
     }
 }
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->shufflechoices = $questiondata->options->shuffleanswers;
     $this->initialise_combined_feedback($question, $questiondata, true);
     $question->choices = array();
     $choiceindexmap = array();
     // Store the choices in arrays by group.
     $i = 1;
     foreach ($questiondata->options->answers as $choicedata) {
         $choice = $this->make_choice($choicedata);
         if (array_key_exists($choice->choice_group(), $question->choices)) {
             $question->choices[$choice->choice_group()][] = $choice;
         } else {
             $question->choices[$choice->choice_group()][1] = $choice;
         }
         end($question->choices[$choice->choice_group()]);
         $choiceindexmap[$i] = array($choice->choice_group(), key($question->choices[$choice->choice_group()]));
         $i += 1;
     }
     $question->places = array();
     $question->textfragments = array();
     $question->rightchoices = array();
     // Break up the question text, and store the fragments, places and right answers.
     $bits = preg_split('/\\[\\[(\\d+)]]/', $question->questiontext, null, PREG_SPLIT_DELIM_CAPTURE);
     $question->textfragments[0] = array_shift($bits);
     $i = 1;
     while (!empty($bits)) {
         $choice = array_shift($bits);
         list($group, $choiceindex) = $choiceindexmap[$choice];
         $question->places[$i] = $group;
         $question->rightchoices[$i] = $choiceindex;
         $question->textfragments[$i] = array_shift($bits);
         $i += 1;
     }
 }
Пример #21
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 initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $this->initialise_ordering_feedback($question, $questiondata);
 }
Пример #23
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->responseformat = $questiondata->options->responseformat;
     $question->graderinfo = $questiondata->options->graderinfo;
     $question->graderinfoformat = $questiondata->options->graderinfoformat;
     $question->backimage = $questiondata->options->backimage;
     $question->boardsize = $questiondata->options->boardsize;
     $question->timelimit = $questiondata->options->timelimit;
 }
Пример #24
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     question_bank::get_qtype('numerical')->initialise_numerical_answers($question, $questiondata);
     foreach ($questiondata->options->answers as $a) {
         $question->answers[$a->id]->tolerancetype = $a->tolerancetype;
         $question->answers[$a->id]->correctanswerlength = $a->correctanswerlength;
         $question->answers[$a->id]->correctanswerformat = $a->correctanswerformat;
     }
     $question->synchronised = $questiondata->options->synchronize;
     $question->unitdisplay = $questiondata->options->showunits;
     $question->unitgradingtype = $questiondata->options->unitgradingtype;
     $question->unitpenalty = $questiondata->options->unitpenalty;
     $question->ap = question_bank::get_qtype('numerical')->make_answer_processor($questiondata->options->units, $questiondata->options->unitsleft);
     $question->datasetloader = new qtype_calculated_dataset_loader($questiondata->id);
 }
Пример #25
0
 protected function initialise_question_instance(question_definition $question, $questiondata)
 {
     parent::initialise_question_instance($question, $questiondata);
     $question->questionvariables = $questiondata->options->questionvariables;
     $question->questionnote = $questiondata->options->questionnote;
     $question->specificfeedback = $questiondata->options->specificfeedback;
     $question->specificfeedbackformat = $questiondata->options->specificfeedbackformat;
     $question->prtcorrect = $questiondata->options->prtcorrect;
     $question->prtcorrectformat = $questiondata->options->prtcorrectformat;
     $question->prtpartiallycorrect = $questiondata->options->prtpartiallycorrect;
     $question->prtpartiallycorrectformat = $questiondata->options->prtpartiallycorrectformat;
     $question->prtincorrect = $questiondata->options->prtincorrect;
     $question->prtincorrectformat = $questiondata->options->prtincorrectformat;
     $question->variantsselectionseed = $questiondata->options->variantsselectionseed;
     $question->options = new stack_options();
     $question->options->set_option('multiplicationsign', $questiondata->options->multiplicationsign);
     $question->options->set_option('complexno', $questiondata->options->complexno);
     $question->options->set_option('inversetrig', $questiondata->options->inversetrig);
     $question->options->set_option('matrixparens', $questiondata->options->matrixparens);
     $question->options->set_option('sqrtsign', (bool) $questiondata->options->sqrtsign);
     $question->options->set_option('simplify', (bool) $questiondata->options->questionsimplify);
     $question->options->set_option('assumepos', (bool) $questiondata->options->assumepositive);
     $requiredparams = stack_input_factory::get_parameters_used();
     foreach ($questiondata->inputs as $name => $inputdata) {
         $allparameters = array('boxWidth' => $inputdata->boxsize, 'strictSyntax' => (bool) $inputdata->strictsyntax, 'insertStars' => (int) $inputdata->insertstars, 'syntaxHint' => $inputdata->syntaxhint, 'forbidWords' => $inputdata->forbidwords, 'allowWords' => $inputdata->allowwords, 'forbidFloats' => (bool) $inputdata->forbidfloat, 'lowestTerms' => (bool) $inputdata->requirelowestterms, 'sameType' => (bool) $inputdata->checkanswertype, 'mustVerify' => (bool) $inputdata->mustverify, 'showValidation' => $inputdata->showvalidation);
         $parameters = array();
         foreach ($requiredparams[$inputdata->type] as $paramname) {
             if ($paramname == 'inputType') {
                 continue;
             }
             $parameters[$paramname] = $allparameters[$paramname];
         }
         // TODO: Do something with $inputdata->options here.
         $question->inputs[$name] = stack_input_factory::make($inputdata->type, $inputdata->name, $inputdata->tans, $parameters);
     }
     $totalvalue = 0;
     foreach ($questiondata->prts as $name => $prtdata) {
         $totalvalue += $prtdata->value;
     }
     if ($questiondata->prts && $totalvalue < 1.0E-7) {
         throw new coding_exception('There is an error authoring your question. ' . 'The $totalvalue, the marks available for the question, must be positive in question ' . $question->name);
     }
     foreach ($questiondata->prts as $name => $prtdata) {
         $nodes = array();
         foreach ($prtdata->nodes as $nodedata) {
             $sans = new stack_cas_casstring($nodedata->sans);
             $sans->get_valid('t');
             $tans = new stack_cas_casstring($nodedata->tans);
             $tans->get_valid('t');
             if (is_null($nodedata->falsepenalty) || $nodedata->falsepenalty === '') {
                 $falsepenalty = $questiondata->penalty;
             } else {
                 $falsepenalty = $nodedata->falsepenalty;
             }
             if (is_null($nodedata->truepenalty) || $nodedata->truepenalty === '') {
                 $truepenalty = $questiondata->penalty;
             } else {
                 $truepenalty = $nodedata->truepenalty;
             }
             $node = new stack_potentialresponse_node($sans, $tans, $nodedata->answertest, $nodedata->testoptions, (bool) $nodedata->quiet, '', $nodedata->id);
             $node->add_branch(0, $nodedata->falsescoremode, $nodedata->falsescore, $falsepenalty, $nodedata->falsenextnode, $nodedata->falsefeedback, $nodedata->falsefeedbackformat, $nodedata->falseanswernote);
             $node->add_branch(1, $nodedata->truescoremode, $nodedata->truescore, $truepenalty, $nodedata->truenextnode, $nodedata->truefeedback, $nodedata->truefeedbackformat, $nodedata->trueanswernote);
             $nodes[$nodedata->nodename] = $node;
         }
         // TODO $feedbackvariables, and $sans, $tans, should probably still be strings
         // here, and should be converted to CAS stuff later, only if needed.
         if ($prtdata->feedbackvariables) {
             $feedbackvariables = new stack_cas_keyval($prtdata->feedbackvariables, null, null, 't');
             $feedbackvariables = $feedbackvariables->get_session();
         } else {
             $feedbackvariables = null;
         }
         $question->prts[$name] = new stack_potentialresponse_tree($name, '', (bool) $prtdata->autosimplify, $prtdata->value / $totalvalue, $feedbackvariables, $nodes, $prtdata->firstnodename);
     }
     $question->deployedseeds = array_values($questiondata->deployedseeds);
 }