/** * Callback function for preg_replace_callback. * Returns replacement code by MIME type. * @param $matches (string) array containing matches: $matches[0] is the complete match, $matches[1] the match for the first subpattern enclosed in '(...)' and so on * @return string replacement string by file extension */ function F_objects_callback($matches) { $width = 0; $height = 0; $alt = ''; if (isset($matches[3]) and $matches[3] > 0) { $width = $matches[3]; } if (isset($matches[4]) and $matches[4] > 0) { $height = $matches[4]; } if (isset($matches[5]) and !empty($matches[5])) { $alt = F_tcecodeToTitle($matches[5]); } return F_objects_replacement($matches[1], $matches[2], $width, $height, $alt); }
/** * Returns a questions menu and navigator buttons. * @param $testdata (array) test data * @param $testuser_id (int) user's test ID * @param $testlog_id (int) test log ID * @param $disable (boolean) if TRUE disable the questions list. * @return string XHTML code */ function F_questionsMenu($testdata, $testuser_id, $testlog_id = 0, $disable = false) { require_once '../config/tce_config.php'; require_once '../../shared/code/tce_functions_tcecode.php'; global $db, $l; $testuser_id = intval($testuser_id); $testlog_id = intval($testlog_id); $str = ''; $testlog_id_prev = 0; // previous question ID $testlog_id_next = 0; // next question ID $testlog_id_last = 0; // temp variable $sql = 'SELECT question_description, question_difficulty, question_timer, testlog_id, testlog_answer_text, testlog_display_time, testlog_change_time FROM ' . K_TABLE_QUESTIONS . ', ' . K_TABLE_TESTS_LOGS . ' WHERE question_id=testlog_question_id AND testlog_testuser_id=' . $testuser_id . ' ORDER BY testlog_id'; if ($r = F_db_query($sql, $db)) { while ($m = F_db_fetch_array($r)) { if ($m['testlog_id'] != $testlog_id) { $str .= '<li>'; $str .= '<input type="submit" name="jumpquestion_' . $m['testlog_id'] . '" id="jumpquestion_' . $m['testlog_id'] . '" value=">" title="' . F_tcecodeToTitle($m['question_description']) . '" /> '; if ($testlog_id_last == $testlog_id) { $testlog_id_next = $m['testlog_id']; } } else { $str .= '<li class="selected">'; $str .= '<input type="button" name="jumpquestion_' . $m['testlog_id'] . '" id="jumpquestion_' . $m['testlog_id'] . '" value=">" title="' . F_tcecodeToTitle($m['question_description']) . '" disabled="disabled"/> '; $testlog_id_prev = $testlog_id_last; $question_timer = F_getBoolean($m['question_timer']); } // display mark when the current question has been displayed $str .= '<acronym'; if (!empty($m['testlog_display_time'])) { $str .= ' class="onbox"'; $str .= ' title="' . $l['h_question_displayed'] . '">+'; } else { $str .= ' class="offbox"'; $str .= ' title="' . $l['h_question_not_displayed'] . '">-'; } $str .= '</acronym>'; $str .= ' '; // show mark when the current question has been answered $str .= '<acronym'; if (!empty($m['testlog_change_time'])) { $str .= ' class="onbox"'; $str .= ' title="' . $l['h_question_answered'] . '">+'; } else { $str .= ' class="offbox"'; $str .= ' title="' . $l['h_question_not_answered'] . '">-'; } $str .= '</acronym>'; $str .= ' '; // show question score $n_question_score = $testdata['test_score_right'] * $m['question_difficulty']; $str .= '<acronym class="offbox" title="' . $l['w_max_score'] . ': ' . $n_question_score . '">'; $str .= sprintf('% 5.1f', $n_question_score); $str .= '</acronym>'; $str .= ' '; if ($testlog_id == 0) { $testlog_id = $m['testlog_id']; $testlog_id_last = $testlog_id; } $testlog_id_last = $m['testlog_id']; $str .= F_tcecodeToLine($m['question_description']); $str .= '</li>' . K_NEWLINE; } } else { F_display_db_error(); } // build quick navigator links (previous - next) $navlink = ''; // button for previous question if (!$question_timer) { $navlink .= '<input type="submit" name="prevquestion" id="prevquestion" value="< ' . $l['w_previous'] . '" title="' . $l['w_previous'] . '"'; if ($testlog_id_prev <= 0 or $testlog_id_prev > $testlog_id) { $navlink .= ' disabled="disabled"'; } $navlink .= ' />'; // button for confirm current question $navlink .= '<input type="submit" name="confirmanswer" id="confirmanswer" value="' . $l['w_confirm'] . '" />'; } // button for next question $navlink .= '<input type="submit" name="nextquestion" id="nextquestion" value="' . $l['w_next'] . ' >" title="' . $l['w_next'] . '"'; if ($testlog_id_next <= 0) { $navlink .= ' disabled="disabled"'; } $navlink .= ' />' . K_NEWLINE; if (($question_timer or $disable) and $testlog_id_next <= 0) { // force test termination $navlink .= '<input type="hidden" name="forceterminate" id="forceterminate" value="lasttimedquestion" />' . K_NEWLINE; } $navlink .= '<input type="hidden" name="prevquestionid" id="prevquestionid" value="' . $testlog_id_prev . '" />' . K_NEWLINE; $navlink .= '<input type="hidden" name="nextquestionid" id="nextquestionid" value="' . $testlog_id_next . '" />' . K_NEWLINE; $navlink .= '<input type="hidden" name="autonext" id="autonext" value="" />' . K_NEWLINE; $navlink = '<div class="navlink">' . $navlink . '</div>' . K_NEWLINE; $rstr = ''; $rstr .= '<br />' . K_NEWLINE; $rstr .= $navlink; $rstr .= '<br />' . K_NEWLINE; if (F_getBoolean($testdata['test_menu_enabled']) and !$disable) { // display questions menu $rstr .= '<a name="questionssection" id="questionssection"></a>' . K_NEWLINE; $rstr .= '<div class="tcecontentbox">' . K_NEWLINE; //fieldset //$rstr .= '<legend>'; $rstr .= $l['w_questions']; //$rstr .= '</legend>'.K_NEWLINE; $rstr .= '<ol class="qlist">' . K_NEWLINE . $str . '</ol>' . K_NEWLINE; $rstr .= '</div>' . K_NEWLINE; //fieldset $rstr .= '<br />' . K_NEWLINE; } return $rstr; }