/** * function which redefines Question::createAnswersForm * @param the formvalidator instance */ function createAnswersForm($form) { $defaults = array(); if (!empty($this->id)) { $objAnswer = new answer($this->id); $preArray = explode('@@', $objAnswer->selectAnswer(1)); $defaults['formula'] = array_pop($preArray); $defaults['answer'] = array_shift($preArray); $defaults['answer'] = preg_replace("/\\[.*\\]/", "", $defaults['answer']); $defaults['weighting'] = $this->weighting; } else { $defaults['answer'] = get_lang('DefaultTextInBlanks'); } $lowestValue = "1.00"; $highestValue = "20.00"; // javascript // echo '<script> function parseTextNumber(textNumber, floatValue) { if (textNumber.indexOf(".") > -1) { textNumber = parseFloat(textNumber); floatValue.exists = "true"; } else { textNumber = parseInt(textNumber); } return textNumber; } function updateRandomValue(element) { // "floatValue" helps to distinguish between an integer (10) and a float with all 0 decimals (10.00) var floatValue = { exists: "false" }; var index = (element.name).match(/\\[[^\\]]*\\]/g); var lowestValue = parseTextNumber(document.getElementById("lowestValue"+index).value, floatValue); var highestValue = parseTextNumber(document.getElementById("highestValue"+index).value, floatValue); var result = Math.random() * (highestValue - lowestValue) + lowestValue; if (floatValue.exists == "true") { result = parseFloat(result).toFixed(2); } else { result = parseInt(result); } document.getElementById("randomValue"+index).innerHTML = "' . get_lang("ExampleValue") . ': " + result; } function FCKeditor_OnComplete(editorInstance) { if (window.attachEvent) { editorInstance.EditorDocument.attachEvent("onkeyup", updateBlanks) ; } else { editorInstance.EditorDocument.addEventListener("keyup", updateBlanks, true); } } var firstTime = true; function updateBlanks() { if (firstTime) { field = document.getElementById("answer"); var answer = field.value; } else { var oEditor = FCKeditorAPI.GetInstance("answer"); //var answer = oEditor.GetXHTML(true); var answer = oEditor.EditorDocument.body.innerHTML; } var blanks = answer.match(/\\[[^\\]]*\\]/g); var fields = "<div class=\\"control-group\\"><label class=\\"control-label\\">' . get_lang('VariableRanges') . '</label><div class=\\"controls\\"><table>"; if (blanks!=null) { if (typeof updateBlanks.randomValues === "undefined") { updateBlanks.randomValues = []; } for (i=0 ; i<blanks.length ; i++){ if (document.getElementById("lowestValue["+i+"]") && document.getElementById("highestValue["+i+"]")) { lowestValue = document.getElementById("lowestValue["+i+"]").value; highestValue = document.getElementById("highestValue["+i+"]").value; } else { lowestValue = ' . $lowestValue . '.toFixed(2); highestValue = ' . $highestValue . '.toFixed(2); for (j=0; j<blanks.length; j++) { updateBlanks.randomValues[j] = parseFloat(Math.random() * (highestValue - lowestValue) + lowestValue).toFixed(2); } } fields += "<tr><td><label>"+blanks[i]+"</label></td><td><input class=\\"span1\\" style=\\"margin-left: 0em;\\" size=\\"5\\" value=\\""+lowestValue+"\\" type=\\"text\\" id=\\"lowestValue["+i+"]\\" name=\\"lowestValue["+i+"]\\" onblur=\\"updateRandomValue(this)\\"/></td><td><input class=\\"span1\\" style=\\"margin-left: 0em; width:80px;\\" size=\\"5\\" value=\\""+highestValue+"\\" type=\\"text\\" id=\\"highestValue["+i+"]\\" name=\\"highestValue["+i+"]\\" onblur=\\"updateRandomValue(this)\\"/></td><td><label class=\\"span3\\" id=\\"randomValue["+i+"]\\"/>' . get_lang('ExampleValue') . ': "+updateBlanks.randomValues[i]+"</label></td></tr>"; } } document.getElementById("blanks_weighting").innerHTML = fields + "</table></div></div>"; if (firstTime) { firstTime = false; } } window.onload = updateBlanks; </script>'; // answer $form->addElement('label', null, '<br /><br />' . get_lang('TypeTextBelow') . ', ' . get_lang('And') . ' ' . get_lang('UseTagForBlank')); $form->addElement('html_editor', 'answer', '<img src="../img/fill_field.png">', 'id="answer" cols="122" rows="6" onkeyup="javascript: updateBlanks(this);"', array('ToolbarSet' => 'TestQuestionDescription', 'Width' => '100%', 'Height' => '350')); $form->addRule('answer', get_lang('GiveText'), 'required'); $form->addRule('answer', get_lang('DefineBlanks'), 'regex', '/\\[.*\\]/'); $form->addElement('label', null, get_lang('IfYouWantOnlyIntegerValuesWriteBothLimitsWithoutDecimals')); $form->addElement('html', '<div id="blanks_weighting"></div>'); $notationListButton = Display::url(get_lang('NotationList'), api_get_path(WEB_PATH) . 'main/exercice/evalmathnotation.php', array('class' => 'btn ajax', '_target' => '_blank')); $form->addElement('html', '<div class="control-group"> <label class="control-label"></label> <div class="controls">' . $notationListButton . '</div> </div>'); $form->addElement('label', null, get_lang('FormulaExample')); $form->addElement('text', 'formula', get_lang('Formula'), array('id' => 'formula', 'class' => 'span4')); $form->addRule('formula', get_lang('GiveFormula'), 'required'); $form->addElement('text', 'weighting', get_lang('Weighting'), array('id' => 'weighting', 'class' => 'span1')); $form->setDefaults(array('weighting' => '10')); $form->addElement('text', 'answerVariations', get_lang('AnswerVariations'), array('class' => 'span1')); $form->addRule('answerVariations', get_lang('GiveAnswerVariations'), 'required'); $form->setDefaults(array('answerVariations' => '1')); global $text, $class; // setting the save button here and not in the question class.php $form->addElement('style_submit_button', 'submitQuestion', $text, 'class="' . $class . '"'); if (!empty($this->id)) { $form->setDefaults($defaults); } else { if ($this->isContent == 1) { $form->setDefaults($defaults); } } }
/** * function which redefines Question::createAnswersForm * @param the formvalidator instance */ function createAnswersForm($form) { $defaults = array(); if (!empty($this->id)) { $objAnswer = new answer($this->id); // the question is encoded like this // [A] B [C] D [E] F::10,10,10@1 // number 1 before the "@" means that is a switchable fill in blank question // [A] B [C] D [E] F::10,10,10@ or [A] B [C] D [E] F::10,10,10 // means that is a normal fill blank question $pre_array = explode('::', $objAnswer->selectAnswer(1)); //make sure we only take the last bit to find special marks $sz = count($pre_array); $is_set_switchable = explode('@', $pre_array[$sz - 1]); if ($is_set_switchable[1]) { $defaults['multiple_answer'] = 1; } else { $defaults['multiple_answer'] = 0; } //Take the complete string except after the last '::' $defaults['answer'] = ''; for ($i = 0; $i < $sz - 1; $i++) { $defaults['answer'] .= $pre_array[$i]; } $a_weightings = explode(',', $is_set_switchable[0]); } else { $defaults['answer'] = get_lang('DefaultTextInBlanks'); } $setValues = null; if (isset($a_weightings) && count($a_weightings) > 0) { foreach ($a_weightings as $i => $weighting) { $setValues .= 'document.getElementById("weighting[' . $i . ']").value = "' . $weighting . '";'; } } // javascript echo '<script> function FCKeditor_OnComplete(editorInstance) { if (window.attachEvent) { editorInstance.EditorDocument.attachEvent("onkeyup", updateBlanks) ; } else { editorInstance.EditorDocument.addEventListener("keyup", updateBlanks, true); } } var firstTime = true; function updateBlanks() { if (firstTime) { field = document.getElementById("answer"); var answer = field.value; } else { var oEditor = FCKeditorAPI.GetInstance("answer"); //var answer = oEditor.GetXHTML(true); var answer = oEditor.EditorDocument.body.innerHTML; } var blanks = answer.match(/\\[[^\\]]*\\]/g); var fields = "<div class=\\"control-group\\"><label class=\\"control-label\\">' . get_lang('Weighting') . '</label><div class=\\"controls\\"><table>"; if (blanks!=null) { for (i=0 ; i<blanks.length ; i++){ if (document.getElementById("weighting["+i+"]")) value = document.getElementById("weighting["+i+"]").value; else value = "10"; fields += "<tr><td><label>"+blanks[i]+"</label></td><td><input style=\\"margin-left: 0em;\\" size=\\"5\\" value=\\""+value+"\\" type=\\"text\\" id=\\"weighting["+i+"]\\" name=\\"weighting["+i+"]\\" /></td></tr>"; } } document.getElementById("blanks_weighting").innerHTML = fields + "</table></div></div>"; if (firstTime) { firstTime = false; ' . $setValues . ' } } window.onload = updateBlanks; </script>'; // answer $form->addElement('label', null, '<br /><br />' . get_lang('TypeTextBelow') . ', ' . get_lang('And') . ' ' . get_lang('UseTagForBlank')); $form->addElement('html_editor', 'answer', '<img src="../img/fill_field.png">', 'id="answer" cols="122" rows="6" onkeyup="javascript: updateBlanks(this);"', array('ToolbarSet' => 'TestQuestionDescription', 'Width' => '100%', 'Height' => '350')); $form->addRule('answer', get_lang('GiveText'), 'required'); $form->addRule('answer', get_lang('DefineBlanks'), 'regex', '/\\[.*\\]/'); //added multiple answers $form->addElement('checkbox', 'multiple_answer', '', get_lang('FillInBlankSwitchable')); $form->addElement('html', '<div id="blanks_weighting"></div>'); global $text, $class; // setting the save button here and not in the question class.php $form->addElement('style_submit_button', 'submitQuestion', $text, 'class="' . $class . '"'); if (!empty($this->id)) { $form->setDefaults($defaults); } else { if ($this->isContent == 1) { $form->setDefaults($defaults); } } }