You are here

function qformat_xml::import_calculated in Quiz 6.6

Same name and namespace in other branches
  1. 6.5 includes/moodle/question/format/xml/format.php \qformat_xml::import_calculated()
1 call to qformat_xml::import_calculated()
qformat_xml::readquestions in includes/moodle/question/format/xml/format.php
parse the array of lines into an array of questions this *could* burn memory - but it won't happen that much so fingers crossed!

File

includes/moodle/question/format/xml/format.php, line 410

Class

qformat_xml

Code

function import_calculated($question) {

  // import numerical question
  // get common parts
  $qo = $this
    ->import_headers($question);

  // header parts particular to numerical
  $qo->qtype = CALCULATED;

  //CALCULATED;

  // get answers array
  // echo "<pre> question";print_r($question);echo "</pre>";
  $answers = $question['#']['answer'];
  $qo->answers = array();
  $qo->feedback = array();
  $qo->fraction = array();
  $qo->tolerance = array();
  $qo->tolerancetype = array();
  $qo->correctanswerformat = array();
  $qo->correctanswerlength = array();
  $qo->feedback = array();
  foreach ($answers as $answer) {

    // answer outside of <text> is deprecated
    if (!empty($answer['#']['text'])) {
      $answertext = $this
        ->import_text($answer['#']['text']);
    }
    else {
      $answertext = trim($answer['#'][0]);
    }
    if ($answertext == '') {
      $qo->answers[] = '*';
    }
    else {
      $qo->answers[] = $answertext;
    }
    $qo->feedback[] = $this
      ->import_text($answer['#']['feedback'][0]['#']['text']);
    $qo->tolerance[] = $answer['#']['tolerance'][0]['#'];

    // fraction as a tag is deprecated
    if (!empty($answer['#']['fraction'][0]['#'])) {
      $qo->fraction[] = $answer['#']['fraction'][0]['#'];
    }
    else {
      $qo->fraction[] = $answer['@']['fraction'] / 100;
    }
    $qo->tolerancetype[] = $answer['#']['tolerancetype'][0]['#'];
    $qo->correctanswerformat[] = $answer['#']['correctanswerformat'][0]['#'];
    $qo->correctanswerlength[] = $answer['#']['correctanswerlength'][0]['#'];
  }

  // get units array
  $qo->unit = array();
  if (isset($question['#']['units'][0]['#']['unit'])) {
    $units = $question['#']['units'][0]['#']['unit'];
    $qo->multiplier = array();
    foreach ($units as $unit) {
      $qo->multiplier[] = $unit['#']['multiplier'][0]['#'];
      $qo->unit[] = $unit['#']['unit_name'][0]['#'];
    }
  }
  $datasets = $question['#']['dataset_definitions'][0]['#']['dataset_definition'];
  $qo->dataset = array();
  $qo->datasetindex = 0;
  foreach ($datasets as $dataset) {
    $qo->datasetindex++;
    $qo->dataset[$qo->datasetindex] = new stdClass();
    $qo->dataset[$qo->datasetindex]->status = $this
      ->import_text($dataset['#']['status'][0]['#']['text']);
    $qo->dataset[$qo->datasetindex]->name = $this
      ->import_text($dataset['#']['name'][0]['#']['text']);
    $qo->dataset[$qo->datasetindex]->type = $dataset['#']['type'][0]['#'];
    $qo->dataset[$qo->datasetindex]->distribution = $this
      ->import_text($dataset['#']['distribution'][0]['#']['text']);
    $qo->dataset[$qo->datasetindex]->max = $this
      ->import_text($dataset['#']['maximum'][0]['#']['text']);
    $qo->dataset[$qo->datasetindex]->min = $this
      ->import_text($dataset['#']['minimum'][0]['#']['text']);
    $qo->dataset[$qo->datasetindex]->length = $this
      ->import_text($dataset['#']['decimals'][0]['#']['text']);
    $qo->dataset[$qo->datasetindex]->distribution = $this
      ->import_text($dataset['#']['distribution'][0]['#']['text']);
    $qo->dataset[$qo->datasetindex]->itemcount = $dataset['#']['itemcount'][0]['#'];
    $qo->dataset[$qo->datasetindex]->datasetitem = array();
    $qo->dataset[$qo->datasetindex]->itemindex = 0;
    $qo->dataset[$qo->datasetindex]->number_of_items = $dataset['#']['number_of_items'][0]['#'];
    $datasetitems = $dataset['#']['dataset_items'][0]['#']['dataset_item'];
    foreach ($datasetitems as $datasetitem) {
      $qo->dataset[$qo->datasetindex]->itemindex++;
      $qo->dataset[$qo->datasetindex]->datasetitem[$qo->dataset[$qo->datasetindex]->itemindex] = new stdClass();
      $qo->dataset[$qo->datasetindex]->datasetitem[$qo->dataset[$qo->datasetindex]->itemindex]->itemnumber = $datasetitem['#']['number'][0]['#'];

      //[0]['#']['number'][0]['#'] ; // [0]['numberitems'] ;//['#']['number'][0]['#'];// $datasetitems['#']['number'][0]['#'];
      $qo->dataset[$qo->datasetindex]->datasetitem[$qo->dataset[$qo->datasetindex]->itemindex]->value = $datasetitem['#']['value'][0]['#'];

      //$datasetitem['#']['value'][0]['#'];
    }
  }

  // echo "<pre>loaded qo";print_r($qo);echo "</pre>";
  return $qo;
}