From 3f76dd525f9530010aa991c6dccd735f424c1c58 Mon Sep 17 00:00:00 2001 From: pichetp Date: Wed, 28 Mar 2007 04:03:07 +0000 Subject: [PATCH] adding import and export datasets functions --- question/type/calculated/questiontype.php | 118 ++++++++++++++++++++-- 1 file changed, 112 insertions(+), 6 deletions(-) diff --git a/question/type/calculated/questiontype.php b/question/type/calculated/questiontype.php index 43b0d6e68f..d5f734a8ef 100644 --- a/question/type/calculated/questiontype.php +++ b/question/type/calculated/questiontype.php @@ -1,8 +1,5 @@ prefix}question_datasets d, + {$CFG->prefix}question_dataset_definitions i + WHERE d.question = '$questionid' + AND d.datasetdefinition = i.id + "; + if ($records = get_records_sql($sql)) { + foreach ($records as $r) { + $def = $r ; + if ($def->category=='0'){ + $def->status='private'; + } else { + $def->status='shared'; + } + $def->type ='calculated' ; + list($distribution, $min, $max,$dec) = explode(':', $def->options, 4); + $def->distribution=$distribution; + $def->minimum=$min; + $def->maximum=$max; + $def->decimals=$dec ; + if ($def->itemcount > 0 ) { + // get the datasetitems + $def->items = array(); + $sql1= (" SELECT itemnumber, definition, id, value + FROM {$CFG->prefix}question_dataset_items + WHERE definition = '$def->id' order by itemnumber ASC "); + if ($items = get_records_sql($sql1)){ + $n = 0; + foreach( $items as $ii){ + $n++; + $def->items[$n] = new stdClass; + $def->items[$n]->itemnumber=$ii->itemnumber; + $def->items[$n]->value=$ii->value; + } + $def->number_of_items=$n ; + } + } + $datasetdefs["1-$r->category-$r->name"] = $def; + } + } + } + return $datasetdefs ; + } + function save_question_options($question) { //$options = $question->subtypeoptions; // Get old answers: @@ -137,10 +182,71 @@ class question_calculated_qtype extends question_dataset_dependent_questiontype // Save units $virtualqtype = $this->get_virtual_qtype(); $virtualqtype->save_numerical_units($question); - + if( isset($question->import_process)&&$question->import_process){ + $this->import_datasets($question); + } return true; } + function import_datasets($question){ + $n = count($question->dataset); + foreach ($question->dataset as $dataset) { + // name, type, option, + $datasetdef = new stdClass(); + $datasetdef->name = $dataset->name; + $datasetdef->type = 1 ; + $datasetdef->options = $dataset->distribution.':'.$dataset->min.':'.$dataset->max.':'.$dataset->length; + $datasetdef->itemcount=$dataset->itemcount; + if ( $dataset->status =='private'){ + $datasetdef->category = 0; + $todo='create' ; + }else if ($dataset->status =='shared' ){ + if ($sharedatasetdefs = get_records_select( + 'question_dataset_definitions', + "type = '1' + AND name = '$dataset->name' + AND category = '$question->category' + ORDER BY id DESC;" + )) { // so there is at least one + $sharedatasetdef = array_shift($sharedatasetdefs); + if ( $sharedatasetdef->options == $datasetdef->options ){// identical so use it + $todo='useit' ; + $datasetdef =$sharedatasetdef ; + } else { // different so create a private one + $datasetdef->category = 0; + $todo='create' ; + } + } + } + if ( $todo=='create'){ + if (!$datasetdef->id = insert_record( + 'question_dataset_definitions', $datasetdef)) { + error("Unable to create dataset $defid"); + } + } + // Create relation to the dataset: + $questiondataset = new stdClass; + $questiondataset->question = $question->id; + $questiondataset->datasetdefinition = $datasetdef->id; + if (!insert_record('question_datasets', + $questiondataset)) { + error("Unable to create relation to dataset $name"); + } + if ($todo=='create'){ // add the items + foreach ($dataset->datasetitem as $dataitem ){ + $datasetitem = new stdClass; + $datasetitem->definition=$datasetdef->id ; + $datasetitem->itemnumber = $dataitem->itemnumber ; + $datasetitem->value = $dataitem->value ; + // echo "
loaded qo";print_r($datasetitem);echo "
"; + if (!insert_record('question_dataset_items', $datasetitem)) { + error("Unable to insert dataset item $item->itemnumber with $item->value for $datasetdef->name"); + } + } + } + } + } + function create_runtime_question($question, $form) { $question = parent::create_runtime_question($question, $form); $question->options->answers = array(); -- 2.39.5