}
function save_dataset_items($question, $fromform){
+ // max datasets = 100 items
+ $max100 = 100 ;
+ $regenerate = optional_param('forceregeneration', 0, PARAM_BOOL);
+ // echo "<pre>"; print_r($fromform);
if (empty($question->options)) {
$this->get_question_options($question);
}
}
}
}
+ // adding supplementary items
+ $numbertoadd =0;
+ if (isset($fromform->addbutton) && $fromform->selectadd > 1 && $maxnumber < $max100 ) {
+ $numbertoadd =$fromform->selectadd-1 ;
+ if ( $max100 - $maxnumber < $numbertoadd ) {
+ $numbertoadd = $max100 - $maxnumber ;
+ }
+ //add the other items.
+ // Generate a new dataset item (or reuse an old one)
+ foreach ($datasetdefs as $defid => $datasetdef) {
+ if (isset($datasetdef->id)) {
+ $datasetdefs[$defid]->items = get_records_sql( // Use number as key!!
+ " SELECT itemnumber, definition, id, value
+ FROM {$CFG->prefix}question_dataset_items
+ WHERE definition = $datasetdef->id ORDER BY itemnumber");
+ }
+ // echo "<pre>"; print_r($datasetdefs[$defid]->items);
+ for ($numberadded =$maxnumber+1 ; $numberadded <= $maxnumber+$numbertoadd ; $numberadded++){
+ if (isset($datasetdefs[$defid]->items[$numberadded]) && ! $regenerate ){
+ // echo "<p>Reuse an previously used record".$numberadded."id".$datasetdef->id."</p>";
+ } else {
+ $datasetitem = new stdClass;
+ $datasetitem->definition = $datasetdef->id ;
+ $datasetitem->itemnumber = $numberadded;
+ if ($this->supports_dataset_item_generation()) {
+ $datasetitem->value = $this->generate_dataset_item($datasetdef->options);
+ } else {
+ $datasetitem->value = '';
+ }
+ //pp echo "<pre>"; print_r( $datasetitem );
+ if (!insert_record('question_dataset_items', $datasetitem)) {
+ error("Error: Unable to insert new dataset item");
+ }
+ }
+ }//for number added
+ }// datasetsdefs end
+ $maxnumber += $numbertoadd ;
+ foreach ($datasetdefs as $key => $newdef) {
+ if (isset($newdef->id) && $newdef->itemcount <= $maxnumber) {
+ $newdef->itemcount = $maxnumber;
+ // Save the new value for options
+ update_record('question_dataset_definitions', $newdef);
+ }
+ }
+ }
+
if (isset($fromform->deletebutton)) {
- // Simply decrease itemcount where == $maxnumber
+ if(isset($fromform->selectdelete)) $newmaxnumber = $maxnumber-$fromform->selectdelete ;
+ else $newmaxnumber = $maxnumber-1 ;
+ if ($newmaxnumber < 0 ) $newmaxnumber = 0 ;
foreach ($datasetdefs as $datasetdef) {
if ($datasetdef->itemcount == $maxnumber) {
- $datasetdef->itemcount--;
+ $datasetdef->itemcount= $newmaxnumber ;
if (!update_record('question_dataset_definitions',
$datasetdef)) {
error("Error: Unable to update itemcount");
}
}
}
- --$maxnumber;
- }
+ }
}
function generate_dataset_item($options) {
if (!ereg('^(uniform|loguniform):([^:]*):([^:]*):([0-9]*)$',
if ('' != $strquestionlabel){
$mform->addElement('static', 'answercomment['.($this->noofitems+1).']', $strquestionlabel);
}
- $mform->closeHeaderBefore('addbutton');
- $mform->addElement('submit', 'addbutton', get_string('additem', 'qtype_datasetdependent'));
+ $addremoveoptions = Array();
+ $addremoveoptions['1']='1';
+ for ($i=10; $i<=100 ; $i+=10){
+ $addremoveoptions["$i"]="$i";
+ }
+ $mform->addElement('header', 'additemhdr', get_string('add', 'moodle'));
+ $mform->closeHeaderBefore('additemhdr');
if ($this->qtypeobj->supports_dataset_item_generation()){
$radiogrp = array();
$radiogrp[] =& $mform->createElement('radio', 'nextpageparam[forceregeneration]', null, get_string('reuseifpossible', 'qtype_datasetdependent'), 0);
$radiogrp[] =& $mform->createElement('radio', 'nextpageparam[forceregeneration]', null, get_string('forceregeneration', 'qtype_datasetdependent'), 1);
- $mform->addGroup($radiogrp, 'forceregenerationgrp', get_string('nextitemtoadd', 'qtype_calculated'), null, false);
+ $mform->addGroup($radiogrp, 'forceregenerationgrp', get_string('nextitemtoadd', 'qtype_calculated'), "<br/>", false);
}
$mform->addElement('submit', 'getnextbutton', get_string('getnextnow', 'qtype_datasetdependent'));
+ $mform->addElement('static', "dividera", '', '<hr />');
+ $addgrp = array();
+ $addgrp[] =& $mform->createElement('submit', 'addbutton', get_string('add', 'moodle'));
+ $addgrp[] =& $mform->createElement('select', "selectadd", get_string('additem', 'qtype_datasetdependent'), $addremoveoptions);
+ $addgrp[] = & $mform->createElement('static',"stat","Items",get_string('item(s)', 'qtype_datasetdependent'));
+ $mform->addGroup($addgrp, 'addgrp', '', ' ', false);
+ $mform->addElement('static', "divideradd", '', '');
+ // $mform->closeHeaderBefore('divideradd');
+ if ($this->noofitems > 0) {
+ $mform->addElement('header', 'additemhdr', get_string('delete', 'moodle'));
+ $deletegrp = array();
+ $deletegrp[] =& $mform->createElement('submit', 'deletebutton', get_string('delete', 'moodle'));
+ $deletegrp[] =& $mform->createElement('select', "selectdelete", get_string('deleteitem', 'qtype_datasetdependent')."1", $addremoveoptions);
+ $deletegrp[] = & $mform->createElement('static',"stat","Items",get_string('lastitem(s)', 'qtype_datasetdependent'));
+ $mform->addGroup($deletegrp, 'deletegrp', '', ' ', false);
+ // $mform->addElement('static', "dividerdelete", '', '<hr />');
+ // $mform->closeHeaderBefore('dividerdelete');
+ } else {
+ $mform->addElement('static','warning','','<span class="error">'.get_string('youmustaddatleastoneitem', 'qtype_datasetdependent').'</span>');
+ }
//------------------------------------------------------------------------------------------------------------------------------
$j = $this->noofitems * count($this->datasetdefs);
if ('' != $strquestionlabel){
$repeated[] =& $mform->addElement('static', "answercomment[$i]", $strquestionlabel);
}
- if ($i == $this->noofitems) {//last item
- $mform->addElement('submit', 'deletebutton', get_string('deletelastitem', 'qtype_datasetdependent'));
- }
}
$mform->setType('number', PARAM_NUMBER);
$mform->setType('itemid', PARAM_INT);
}
$formdata['nextpageparam[forceregeneration]'] = $this->regenerate;
-
+ $formdata['selectdelete'] = '1';
+ $formdata['selectadd'] = '1';
$j = $this->noofitems * count($this->datasetdefs)+1;
$data = array(); // data for comment_on_datasetitems later
//dataset generation dafaults
function validation($data){
$errors = array();
if (isset($data['backtoquiz']) && ($this->noofitems==0)){
- $errors['addbutton'] = get_string('youmustaddatleastoneitem', 'qtype_datasetdependent');
+ $errors['warning'] = get_string('warning', 'mnet');
}
return $errors;
}