/** * fix_js_ShowMessage * * @param xxx $str (passed by reference) * @param xxx $start * @param xxx $length * @return xxx */ function fix_js_ShowMessage(&$str, $start, $length) { $substr = substr($str, $start, $length); // do standard fix for this function parent::fix_js_ShowMessage($substr, 0, strlen($substr)); // add extra argument, QNum, to this function $substr = preg_replace($this->searchShowMessage, $this->replaceShowMessage, $substr, 1); if ($pos = strpos($substr, '{')) { $insert = "\n" . "\tif (typeof(QNum)!='undefined' && State[QNum] && State[QNum][0]>=0) {\n" . "\t\t// this question is finished\n" . "\t\tStopSound(CurrQNum);\n" . "\t\tif (ShowingAllQuestions) {\n" . "\t\t\tCurrQNum = QNum;\n" . "\t\t} else {\n" . "\t\t\t// move to next question, if there is one\n" . "\t\t\tvar i_max = QArray.length;\n" . "\t\t\tfor (var i=1; i<i_max; i++) {\n" . "\t\t\t\t// calculate the next index for QArray\n" . "\t\t\t\tvar next_i = (i + CurrQNum) % i_max;\n" . "\t\t\t\tif (QArray[next_i] && QArray[next_i].id) {\n" . "\t\t\t\t\tvar matches = QArray[next_i].id.match(new RegExp('\\\\d+\$'));\n" . "\t\t\t\t\tif (matches) {\n" . "\t\t\t\t\t\tvar next_q = parseInt(matches[0]);\n" . "\t\t\t\t\t\tif (State[next_q] && State[next_q][0]<0) {\n" . "\t\t\t\t\t\t\t// change to unanswered question\n" . "\t\t\t\t\t\t\tChangeQ(next_i - CurrQNum);\n" . "\t\t\t\t\t\t\tbreak;\n" . "\t\t\t\t\t\t}\n" . "\t\t\t\t\t}\n" . "\t\t\t\t}\n" . "\t\t\t}\n" . "\t\t}\n" . "\t}\n" . "\t// only show feedback if quiz is finished\n" . "\tif (! Finished) return false;"; $substr = substr_replace($substr, $insert, $pos + 1, 0); } $str = substr_replace($str, $substr, $start, $length); }
/** * fix_js_ShowMessage * * @param xxx $str (passed by reference) * @param xxx $start * @param xxx $length * @return xxx */ function fix_js_ShowMessage(&$str, $start, $length) { $substr = substr($str, $start, $length); // do standard fix for this function parent::fix_js_ShowMessage($substr, 0, strlen($substr)); // add extra argument, QNum, to this function $substr = preg_replace('/(?<=ShowMessage)\\(' . '(.*)' . '\\)/', '(\\1, QNum)', $substr, 1); if ($this->expand_UserDefined2()) { $StopSound = "\t\t\t" . 'StopSound(CurrQNum);' . "\n"; } else { $StopSound = ''; } if ($pos = strpos($substr, '{')) { $insert = "\n" . "\tif (typeof(QNum)!='undefined' && State[QNum] && State[QNum][0]>=0) {\n" . "\t\t// this question is finished\n" . "\t\tif (ShowingAllQuestions) {\n" . "\t\t\tCurrQNum = QNum;\n" . "\t\t} else {\n" . "\t\t\t// move to next question, if there is one\n" . "\t\t\tvar i_max = QArray.length;\n" . "\t\t\tfor (var i=1; i<i_max; i++) {\n" . "\t\t\t\t// calculate the next index for QArray\n" . "\t\t\t\tvar next_i = (i + CurrQNum) % i_max;\n" . "\t\t\t\tif (QArray[next_i] && QArray[next_i].id) {\n" . "\t\t\t\t\tvar matches = QArray[next_i].id.match(new RegExp('\\\\d+\$'));\n" . "\t\t\t\t\tif (matches) {\n" . "\t\t\t\t\t\tvar next_q = parseInt(matches[0]);\n" . "\t\t\t\t\t\tif (State[next_q] && State[next_q][0]<0) {\n" . "\t\t\t\t\t\t\t// change to unanswered question\n" . "\t\t\t\t\t\t\tChangeQ(next_i - CurrQNum);\n" . "\t\t\t\t\t\t\tbreak;\n" . "\t\t\t\t\t\t}\n" . "\t\t\t\t\t}\n" . "\t\t\t\t}\n" . "\t\t\t}\n" . "\t\t}\n" . "\t\tvar q = AA_JQuiz_GetQ(CurrQNum);\n" . "\t\tif (q==QNum) {\n" . "\t\t\t// this was the last question\n" . "\t\t\tAA_SetProgressDot(q, q);\n" . "\t\t}\n" . "\t}\n" . "\t// clear and hide feedback, if necessary\n" . "\tif (! Feedback) {\n" . "\t\tvar obj = document.getElementById('FeedbackContent')\n" . "\t\tif (obj) {\n" . "\t\t\tobj.innerHTML = '';\n" . "\t\t}\n" . "\t\tvar obj = document.getElementById('FeedbackDiv')\n" . "\t\tif (obj) {\n" . "\t\t\tobj.style.display = 'none';\n" . "\t\t}\n" . "\t\tobj = null;\n" . "\t\treturn false;\n" . "\t}"; $substr = substr_replace($substr, $insert, $pos + 1, 0); } $str = substr_replace($str, $substr, $start, $length); }