本文整理汇总了PHP中F_display_db_error函数的典型用法代码示例。如果您正苦于以下问题:PHP F_display_db_error函数的具体用法?PHP F_display_db_error怎么用?PHP F_display_db_error使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了F_display_db_error函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: F_send_report_emails
//.........这里部分代码省略.........
AND testuser_test_id=' . $test_id . '
AND testuser_status>0';
if ($group_id > 0) {
$sql .= ' AND testuser_user_id IN (SELECT usrgrp_user_id FROM ' . K_TABLE_USERGROUP . ' WHERE usrgrp_group_id=' . $group_id . ')';
}
} else {
// select only one test of one user
$sql = 'SELECT user_id, user_name, user_email, user_firstname, user_lastname, testuser_creation_time
FROM ' . K_TABLE_TEST_USER . ', ' . K_TABLE_USERS . '
WHERE testuser_user_id=user_id
AND testuser_user_id=' . $user_id . '
AND testuser_test_id=' . $test_id . '
AND testuser_status>0
LIMIT 1';
}
// get test data
$testdata = F_getTestData($test_id);
if ($r = F_db_query($sql, $db)) {
while ($m = F_db_fetch_array($r)) {
if (strlen($m['user_email']) > 3) {
// get user's test stats
$usrtestdata = F_getUserTestStat($test_id, $m['user_id']);
// set HTML header
$mail->Body = $emailcfg['MsgHeader'];
// compose alternate TEXT message
$mail->AltBody = '' . $l['t_result_user'] . ' [' . $m['testuser_creation_time'] . ']' . K_NEWLINE;
$mail->AltBody .= $l['w_test'] . ': ' . $testdata['test_name'] . K_NEWLINE;
$passmsg = '';
if ($testdata['test_score_threshold'] > 0) {
$mail->AltBody .= $l['w_test_score_threshold'] . ': ' . $testdata['test_score_threshold'];
if ($usrtestdata['score'] >= $testdata['test_score_threshold']) {
$passmsg = ' - ' . $l['w_passed'];
} else {
$passmsg = ' - ' . $l['w_not_passed'];
}
$mail->AltBody .= K_NEWLINE;
}
$mail->AltBody .= $l['w_score'] . ': ' . $usrtestdata['score'] . ' (' . round(100 * $usrtestdata['score'] / $usrtestdata['max_score']) . '%)' . $passmsg . K_NEWLINE;
$mail->AltBody .= $l['w_answers_right'] . ': ' . $usrtestdata['right'] . ' (' . round(100 * $usrtestdata['right'] / $usrtestdata['all']) . '%)' . K_NEWLINE;
$mail->AltBody .= $l['w_answers_wrong'] . ': ' . $usrtestdata['wrong'] . ' (' . round(100 * $usrtestdata['wrong'] / $usrtestdata['all']) . '%)' . K_NEWLINE;
$mail->AltBody .= $l['w_questions_unanswered'] . ': ' . $usrtestdata['unanswered'] . ' (' . round(100 * $usrtestdata['unanswered'] / $usrtestdata['all']) . '%)' . K_NEWLINE;
$mail->AltBody .= $l['w_questions_undisplayed'] . ': ' . $usrtestdata['undisplayed'] . ' (' . round(100 * $usrtestdata['undisplayed'] / $usrtestdata['all']) . '%)' . K_NEWLINE;
if ($mode == 0) {
// create PDF doc
$pdf_content = file_get_contents(K_PATH_HOST . K_PATH_TCEXAM . 'admin/code/tce_pdf_results.php?mode=3&testid=' . $test_id . '&groupid=0&userid=' . $m['user_id'] . '&email=' . md5(date('Y') . K_RANDOM_SECURITY . $test_id . $m['user_id']));
// attach doc
$doc_name = 'test_' . date('Ymd', strtotime($m['testuser_creation_time'])) . '_' . $test_id . '_' . $m['user_id'] . '.pdf';
$mail->AddStringAttachment($pdf_content, $doc_name, $emailcfg['AttachmentsEncoding'], 'application/octet-stream');
$mail->AltBody .= K_NEWLINE . $l['w_attachment'] . ': ' . $doc_name . K_NEWLINE;
}
// convert alternate text to HTML
$mail->Body .= str_replace(K_NEWLINE, '<br />' . K_NEWLINE, $mail->AltBody);
// add HTML footer
$mail->Body .= $emailcfg['MsgFooter'];
//--- Elaborate user Templates ---
$mail->Body = str_replace('#CHARSET#', $l['a_meta_charset'], $mail->Body);
$mail->Body = str_replace('#LANG#', $l['a_meta_language'], $mail->Body);
$mail->Body = str_replace('#LANGDIR#', $l['a_meta_dir'], $mail->Body);
$mail->Body = str_replace('#EMAIL#', $m['user_email'], $mail->Body);
$mail->Body = str_replace('#USERNAME#', htmlspecialchars($m['user_name'], ENT_NOQUOTES, $l['a_meta_charset']), $mail->Body);
$mail->Body = str_replace('#USERFIRSTNAME#', htmlspecialchars($m['user_firstname'], ENT_NOQUOTES, $l['a_meta_charset']), $mail->Body);
$mail->Body = str_replace('#USERLASTNAME#', htmlspecialchars($m['user_lastname'], ENT_NOQUOTES, $l['a_meta_charset']), $mail->Body);
// add a "To" address
$mail->AddAddress($m['user_email'], $m['user_name']);
$email_num++;
$progresslog = '' . $email_num . '. ' . $m['user_email'] . ' [' . $m['user_name'] . ']';
//output user data
if (!$mail->Send()) {
//send email to user
$progresslog .= ' [' . $l['t_error'] . ']';
//display error message
}
$mail->ClearAddresses();
// Clear all addresses for next loop
$mail->ClearAttachments();
// Clears all previously set filesystem, string, and binary attachments
} else {
$progresslog = '[' . $l['t_error'] . '] ' . $m['user_name'] . ': ' . $l['m_unknown_email'] . '';
//output user data
}
echo '' . $progresslog . '<br />' . K_NEWLINE;
//output processed emails
flush();
// force browser output
}
} else {
F_display_db_error(false);
}
$mail->ClearAddresses();
// Clear all addresses for next loop
$mail->ClearCustomHeaders();
// Clears all custom headers
$mail->ClearAllRecipients();
// Clears all recipients assigned in the TO, CC and BCC
$mail->ClearAttachments();
// Clears all previously set filesystem, string, and binary attachments
$mail->ClearReplyTos();
// Clears all recipients assigned in the ReplyTo array
return;
}
示例2: F_print_error
F_print_error('MESSAGE', $l['m_user_registration_ok']);
echo K_NEWLINE;
echo '<div class="container">' . K_NEWLINE;
if (K_OTP_LOGIN) {
require_once '../../shared/tcpdf/tcpdf_barcodes_2d.php';
$host = preg_replace('/[h][t][t][p][s]?[:][\\/][\\/]/', '', K_PATH_HOST);
$qrcode = new TCPDF2DBarcode('otpauth://totp/' . $m['user_name'] . '@' . $host . '?secret=' . $m['user_otpkey'], 'QRCODE,H');
echo '<p>' . $l['m_otp_qrcode'] . '</p>' . K_NEWLINE;
echo '<h2>' . $m['user_otpkey'] . '</h2>' . K_NEWLINE;
echo '<div style="margin:40px 40px 40px 40px;">' . K_NEWLINE;
echo $qrcode->getBarcodeHTML(6, 6, 'black');
echo '</div>' . K_NEWLINE;
}
echo '<p><strong><a href="index.php" title="' . $l['h_index'] . '">' . $l['h_index'] . ' ></a></strong></p>' . K_NEWLINE;
echo '</div>' . K_NEWLINE;
require_once '../code/tce_page_footer.php';
exit;
}
}
} else {
F_display_db_error(false);
}
F_print_error('ERROR', 'USER VERIFICATION ERROR');
echo K_NEWLINE;
echo '<div class="container">' . K_NEWLINE;
echo '<strong><a href="index.php" title="' . $l['h_index'] . '">' . $l['h_index'] . ' ></a></strong>' . K_NEWLINE;
echo '</div>' . K_NEWLINE;
require_once '../code/tce_page_footer.php';
//============================================================+
// END OF FILE
//============================================================+
示例3: F_csv_export_users
/**
* Export all users to CSV grouped by users' groups.
* @author Nicola Asuni
* @since 2006-03-30
* @return CSV data
*/
function F_csv_export_users()
{
global $l, $db;
require_once '../config/tce_config.php';
$csv = '';
// CSV data to be returned
// print column names
$csv .= 'user_id';
$csv .= K_TAB . 'user_name';
$csv .= K_TAB . 'user_password';
$csv .= K_TAB . 'user_email';
$csv .= K_TAB . 'user_regdate';
$csv .= K_TAB . 'user_ip';
$csv .= K_TAB . 'user_firstname';
$csv .= K_TAB . 'user_lastname';
$csv .= K_TAB . 'user_birthdate';
$csv .= K_TAB . 'user_birthplace';
$csv .= K_TAB . 'user_regnumber';
$csv .= K_TAB . 'user_ssn';
$csv .= K_TAB . 'user_level';
$csv .= K_TAB . 'user_verifycode';
$csv .= K_TAB . 'user_groups';
$sql = 'SELECT * FROM ' . K_TABLE_USERS . ' WHERE (user_id>1)';
if ($_SESSION['session_user_level'] < K_AUTH_ADMINISTRATOR) {
// filter for level
$sql .= ' AND ((user_level<' . $_SESSION['session_user_level'] . ') OR (user_id=' . $_SESSION['session_user_id'] . '))';
// filter for groups
$sql .= ' AND user_id IN (SELECT tb.usrgrp_user_id
FROM ' . K_TABLE_USERGROUP . ' AS ta, ' . K_TABLE_USERGROUP . ' AS tb
WHERE ta.usrgrp_group_id=tb.usrgrp_group_id
AND ta.usrgrp_user_id=' . intval($_SESSION['session_user_id']) . '
AND tb.usrgrp_user_id=user_id)';
}
$sql .= ' ORDER BY user_lastname,user_firstname,user_name';
if ($r = F_db_query($sql, $db)) {
while ($m = F_db_fetch_array($r)) {
$csv .= K_NEWLINE . $m['user_id'];
$csv .= K_TAB . $m['user_name'];
$csv .= K_TAB;
// password cannot be exported because is encrypted
$csv .= K_TAB . $m['user_email'];
$csv .= K_TAB . $m['user_regdate'];
$csv .= K_TAB . $m['user_ip'];
$csv .= K_TAB . $m['user_firstname'];
$csv .= K_TAB . $m['user_lastname'];
$csv .= K_TAB . substr($m['user_birthdate'], 0, 10);
$csv .= K_TAB . $m['user_birthplace'];
$csv .= K_TAB . $m['user_regnumber'];
$csv .= K_TAB . $m['user_ssn'];
$csv .= K_TAB . $m['user_level'];
$csv .= K_TAB . $m['user_verifycode'];
$csv .= K_TAB;
$grp = '';
// comma separated list of user's groups
$sqlg = 'SELECT *
FROM ' . K_TABLE_GROUPS . ', ' . K_TABLE_USERGROUP . '
WHERE usrgrp_group_id=group_id
AND usrgrp_user_id=' . $m['user_id'] . '
ORDER BY group_name';
if ($rg = F_db_query($sqlg, $db)) {
while ($mg = F_db_fetch_array($rg)) {
$grp .= $mg['group_name'] . ',';
}
} else {
F_display_db_error();
}
if (!empty($grp)) {
// add user's groups removing last comma
$csv .= substr($grp, 0, -1);
}
}
} else {
F_display_db_error();
}
return $csv;
}
示例4: F_check_unique
/**
* Check if specified fields are unique on table.
* @param $table (string) table name
* @param $where (string) SQL where clause
* @param $fieldname (mixed) name of table column to check
* @param $fieldid (mixed) ID of table row to check
* @return bool true if unique, false otherwise
*/
function F_check_unique($table, $where, $fieldname = FALSE, $fieldid = FALSE)
{
require_once '../config/tce_config.php';
global $l, $db;
$sqlc = 'SELECT * FROM ' . $table . ' WHERE ' . $where . ' LIMIT 1';
if ($rc = F_db_query($sqlc, $db)) {
if ($fieldname === FALSE and $fieldid === FALSE and F_count_rows($table, 'WHERE ' . $where) > 0) {
return FALSE;
}
if ($mc = F_db_fetch_array($rc)) {
if ($mc[$fieldname] == $fieldid) {
return TRUE;
// the values are unchanged
}
} else {
// the new values are not yet present on table
return TRUE;
}
} else {
F_display_db_error();
}
// another table row contains the same values
return FALSE;
}
示例5: F_list_online_users
/**
* Display online users.
* @author Nicola Asuni
* @since 2001-10-18
* @param $wherequery (string) users selection query
* @param $order_field (string) order by column name
* @param $orderdir (int) oreder direction
* @param $firstrow (int) number of first row to display
* @param $rowsperpage (int) number of rows per page
* @return false in case of empty database, true otherwise
*/
function F_list_online_users($wherequery, $order_field, $orderdir, $firstrow, $rowsperpage)
{
global $l, $db;
require_once '../config/tce_config.php';
require_once '../../shared/code/tce_functions_page.php';
require_once 'tce_functions_user_select.php';
//initialize variables
$orderdir = intval($orderdir);
$firstrow = intval($firstrow);
$rowsperpage = intval($rowsperpage);
// order fields for SQL query
if (empty($order_field) or !in_array($order_field, array('cpsession_id', 'cpsession_data'))) {
$order_field = 'cpsession_expiry';
}
if ($orderdir == 0) {
$nextorderdir = 1;
$full_order_field = $order_field;
} else {
$nextorderdir = 0;
$full_order_field = $order_field . ' DESC';
}
if (!F_count_rows(K_TABLE_SESSIONS)) {
//if the table is void (no items) display message
echo '<h2>' . $l['m_databasempty'] . '</h2>';
return FALSE;
}
if (empty($wherequery)) {
$sql = 'SELECT * FROM ' . K_TABLE_SESSIONS . ' ORDER BY ' . $full_order_field . '';
} else {
$wherequery = F_escape_sql($db, $wherequery);
$sql = 'SELECT * FROM ' . K_TABLE_SESSIONS . ' ' . $wherequery . ' ORDER BY ' . $full_order_field . '';
}
if (K_DATABASE_TYPE == 'ORACLE') {
$sql = 'SELECT * FROM (' . $sql . ') WHERE rownum BETWEEN ' . $firstrow . ' AND ' . ($firstrow + $rowsperpage) . '';
} else {
$sql .= ' LIMIT ' . $rowsperpage . ' OFFSET ' . $firstrow . '';
}
echo '<div class="container">' . K_NEWLINE;
echo '<table class="userselect">' . K_NEWLINE;
echo '<tr>' . K_NEWLINE;
echo '<th>' . $l['w_user'] . '</th>' . K_NEWLINE;
echo '<th>' . $l['w_level'] . '</th>' . K_NEWLINE;
echo '<th>' . $l['w_ip'] . '</th>' . K_NEWLINE;
echo '</tr>' . K_NEWLINE;
if ($r = F_db_query($sql, $db)) {
while ($m = F_db_fetch_array($r)) {
$this_session = F_session_string_to_array($m['cpsession_data']);
echo '<tr>';
echo '<td align="left">';
$user_str = '';
if ($this_session['session_user_lastname']) {
$user_str .= urldecode($this_session['session_user_lastname']) . ', ';
}
if ($this_session['session_user_firstname']) {
$user_str .= urldecode($this_session['session_user_firstname']) . '';
}
$user_str .= ' (' . urldecode($this_session['session_user_name']) . ')';
if (F_isAuthorizedEditorForUser($this_session['session_user_id'])) {
echo '<a href="tce_edit_user.php?user_id=' . $this_session['session_user_id'] . '">' . $user_str . '</a>';
} else {
echo $user_str;
}
echo '</td>';
echo '<td>' . $this_session['session_user_level'] . '</td>';
echo '<td>' . $this_session['session_user_ip'] . '</td>';
echo '</tr>' . K_NEWLINE;
}
} else {
F_display_db_error();
}
echo '</table>' . K_NEWLINE;
// --- ------------------------------------------------------
// --- page jump
if ($rowsperpage > 0) {
$sql = 'SELECT count(*) AS total FROM ' . K_TABLE_SESSIONS . ' ' . $wherequery . '';
if (!empty($order_field)) {
$param_array = '&order_field=' . urlencode($order_field) . '';
}
if (!empty($orderdir)) {
$param_array .= '&orderdir=' . $orderdir . '';
}
$param_array .= '&submitted=1';
F_show_page_navigator($_SERVER['SCRIPT_NAME'], $sql, $firstrow, $rowsperpage, $param_array);
}
echo '<div class="pagehelp">' . $l['hp_online_users'] . '</div>' . K_NEWLINE;
echo '</div>' . K_NEWLINE;
return TRUE;
}
示例6: F_updateTestComment
/**
* Updates user's test comment.<br>
* @param $test_id (int) test ID
* @param $testcomment (string) user comment.
* @return string XHTML code
* @since 4.0.000 (2006-10-01)
*/
function F_updateTestComment($test_id, $testcomment)
{
require_once '../config/tce_config.php';
global $db, $l;
$test_id = intval($test_id);
$testcomment = F_escape_sql($testcomment);
$user_id = intval($_SESSION['session_user_id']);
$sql = 'UPDATE ' . K_TABLE_TEST_USER . '
SET testuser_comment=\'' . $testcomment . '\'
WHERE testuser_test_id=' . $test_id . '
AND testuser_user_id=' . $user_id . '';
if (!($r = F_db_query($sql, $db))) {
F_display_db_error();
}
}
示例7: F_isUsedMediaFile
/**
* Return true if the file is used on question or answer descriptions
* @author Nicola Asuni
* @param $file (string) the fiel to search
* @return true if the file is used, false otherwise
*/
function F_isUsedMediaFile($file)
{
global $l, $db;
require_once '../config/tce_config.php';
// remove cache root from file path
$file = substr($file, strlen(K_PATH_CACHE));
// search on questions
$sql = 'SELECT question_id FROM ' . K_TABLE_QUESTIONS . ' WHERE question_description LIKE \'%' . $file . '[/object%\' OR question_explanation LIKE \'%' . $file . '[/object%\' LIMIT 1';
if ($r = F_db_query($sql, $db)) {
if ($m = F_db_fetch_array($r)) {
return true;
}
} else {
F_display_db_error();
}
// search on answers
$sql = 'SELECT answer_id FROM ' . K_TABLE_ANSWERS . ' WHERE answer_description LIKE \'%' . $file . '[/object%\' OR answer_explanation LIKE \'%' . $file . '[/object%\' LIMIT 1';
if ($r = F_db_query($sql, $db)) {
if ($m = F_db_fetch_array($r)) {
return true;
}
} else {
F_display_db_error();
}
return false;
}
示例8: F_xml_export_question_stats
/**
* Export all question statistics of the selected test to XML.
* @author Nicola Asuni
* @since 2010-05-10
* @param $test_id (int) test ID
* @return XML data
*/
function F_xml_export_question_stats($test_id)
{
global $l, $db;
require_once '../config/tce_config.php';
require_once '../../shared/code/tce_authorization.php';
require_once '../code/tce_functions_auth_sql.php';
$boolean = array('false', 'true');
$type = array('single', 'multiple', 'text', 'ordering');
$xml = '';
// XML data to be returned
$xml .= '<' . '?xml version="1.0" encoding="UTF-8" ?' . '>' . K_NEWLINE;
$xml .= '<tcexamquestionstats version="' . K_TCEXAM_VERSION . '">' . K_NEWLINE;
$xml .= K_TAB . '<header';
$xml .= ' lang="' . K_USER_LANG . '"';
$xml .= ' date="' . date(K_TIMESTAMP_FORMAT) . '">' . K_NEWLINE;
$xml .= K_TAB . '</header>' . K_NEWLINE;
$xml .= K_TAB . '<body>' . K_NEWLINE;
// get test data
$testdata = F_getTestData($test_id);
// get total number of questions for the selected test
$num_questions = F_count_rows(K_TABLE_TESTS_LOGS . ', ' . K_TABLE_TEST_USER, 'WHERE testlog_testuser_id=testuser_id AND testuser_test_id=' . $test_id . '');
// output questions stats
$sqlr = 'SELECT
question_id,
COUNT(question_id) AS recurrence,
AVG(testlog_score) AS average_score,
AVG(testlog_change_time - testlog_display_time) AS average_time,
min(question_difficulty) AS question_difficulty
FROM ' . K_TABLE_TESTS_LOGS . ', ' . K_TABLE_TEST_USER . ', ' . K_TABLE_QUESTIONS . '
WHERE testlog_testuser_id=testuser_id
AND testlog_question_id=question_id
AND testuser_test_id=' . $test_id . '
GROUP BY question_id
ORDER BY recurrence DESC,average_score DESC';
if ($rr = F_db_query($sqlr, $db)) {
while ($mr = F_db_fetch_array($rr)) {
$xml .= K_TAB . K_TAB . '<question>' . K_NEWLINE;
// get the question max score
$question_max_score = $testdata['test_score_right'] * $mr['question_difficulty'];
$qsttestdata = F_getQuestionTestStat($test_id, $mr['question_id']);
$xml .= K_TAB . K_TAB . K_TAB . '<id>' . $mr['question_id'] . '</id>' . K_NEWLINE;
$question_description = '';
$sqlrq = 'SELECT question_description FROM ' . K_TABLE_QUESTIONS . ' WHERE question_id=' . $mr['question_id'] . '';
if ($rrq = F_db_query($sqlrq, $db)) {
if ($mrq = F_db_fetch_array($rrq)) {
$question_description = $mrq['question_description'];
}
} else {
F_display_db_error();
}
$xml .= K_TAB . K_TAB . K_TAB . '<description>' . F_text_to_xml($question_description) . '</description>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<recurrence>' . $mr['recurrence'] . '</recurrence>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<recurrence_percent>' . F_formatXMLPercentage($mr['recurrence'] / $num_questions) . '</recurrence_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<points>' . number_format($mr['average_score'], 3, '.', '') . '</points>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<points_percent>' . F_formatXMLPercentage($mr['average_score'] / $question_max_score) . '</points_percent>' . K_NEWLINE;
if (stripos($mr['average_time'], ':') !== FALSE) {
// PostgreSQL returns formatted time, while MySQL returns the number of seconds
$mr['average_time'] = strtotime($mr['average_time']);
}
$xml .= K_TAB . K_TAB . K_TAB . '<time>' . date('i:s', $mr['average_time']) . '</time>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<correct>' . $qsttestdata['right'] . '</correct>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<correct_percent>' . F_formatXMLPercentage($qsttestdata['right'] / $qsttestdata['num']) . '</correct_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<wrong>' . $qsttestdata['wrong'] . '</wrong>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<wrong_percent>' . F_formatXMLPercentage($qsttestdata['wrong'] / $qsttestdata['num']) . '</wrong_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<unanswered>' . $qsttestdata['unanswered'] . '</unanswered>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<unanswered_percent>' . F_formatXMLPercentage($qsttestdata['unanswered'] / $qsttestdata['num']) . '</unanswered_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<undisplayed>' . $qsttestdata['undisplayed'] . '</undisplayed>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<undisplayed_percent>' . F_formatXMLPercentage($qsttestdata['undisplayed'] / $qsttestdata['num']) . '</undisplayed_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<unrated>' . $qsttestdata['unrated'] . '</unrated>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<unrated_percent>' . F_formatXMLPercentage($qsttestdata['unrated'] / $qsttestdata['num']) . '</unrated_percent>' . K_NEWLINE;
// answers statistics
$sqla = 'SELECT *
FROM ' . K_TABLE_ANSWERS . '
WHERE answer_question_id=' . $mr['question_id'] . '
ORDER BY answer_id';
if ($ra = F_db_query($sqla, $db)) {
while ($ma = F_db_fetch_array($ra)) {
$xml .= K_TAB . K_TAB . K_TAB . '<answer>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<id>' . $ma['answer_id'] . '</id>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<description>' . F_text_to_xml($ma['answer_description']) . '</description>' . K_NEWLINE;
$num_all_answers = F_count_rows(K_TABLE_TEST_USER . ', ' . K_TABLE_TESTS_LOGS . ', ' . K_TABLE_ANSWERS . ', ' . K_TABLE_LOG_ANSWER . ' WHERE logansw_answer_id=answer_id AND logansw_testlog_id=testlog_id AND testlog_testuser_id=testuser_id AND testuser_test_id=' . $test_id . ' AND testlog_question_id=' . $mr['question_id'] . '');
$num_answers = F_count_rows(K_TABLE_TEST_USER . ', ' . K_TABLE_TESTS_LOGS . ', ' . K_TABLE_ANSWERS . ', ' . K_TABLE_LOG_ANSWER . ' WHERE answer_id=' . $ma['answer_id'] . ' AND logansw_answer_id=answer_id AND logansw_testlog_id=testlog_id AND testlog_testuser_id=testuser_id AND testuser_test_id=' . $test_id . ' AND testlog_question_id=' . $mr['question_id'] . '');
$right_answers = F_count_rows(K_TABLE_TEST_USER . ', ' . K_TABLE_TESTS_LOGS . ', ' . K_TABLE_ANSWERS . ', ' . K_TABLE_LOG_ANSWER . ' WHERE answer_id=' . $ma['answer_id'] . ' AND logansw_answer_id=answer_id AND logansw_testlog_id=testlog_id AND testlog_testuser_id=testuser_id AND testuser_test_id=' . $test_id . ' AND testlog_question_id=' . $mr['question_id'] . ' AND ((answer_isright=\'0\' AND logansw_selected=0) OR (answer_isright=\'1\' AND logansw_selected=1) OR (answer_position IS NOT NULL AND logansw_position IS NOT NULL AND answer_position=logansw_position))');
$wrong_answers = F_count_rows(K_TABLE_TEST_USER . ', ' . K_TABLE_TESTS_LOGS . ', ' . K_TABLE_ANSWERS . ', ' . K_TABLE_LOG_ANSWER . ' WHERE answer_id=' . $ma['answer_id'] . ' AND logansw_answer_id=answer_id AND logansw_testlog_id=testlog_id AND testlog_testuser_id=testuser_id AND testuser_test_id=' . $test_id . ' AND testlog_question_id=' . $mr['question_id'] . ' AND ((answer_isright=\'0\' AND logansw_selected=1) OR (answer_isright=\'1\' AND logansw_selected=0) OR (answer_position IS NOT NULL AND answer_position!=logansw_position))');
$unanswered = F_count_rows(K_TABLE_TEST_USER . ', ' . K_TABLE_TESTS_LOGS . ', ' . K_TABLE_ANSWERS . ', ' . K_TABLE_LOG_ANSWER . ' WHERE answer_id=' . $ma['answer_id'] . ' AND logansw_answer_id=answer_id AND logansw_testlog_id=testlog_id AND testlog_testuser_id=testuser_id AND testuser_test_id=' . $test_id . ' AND testlog_question_id=' . $mr['question_id'] . ' AND logansw_selected=-1');
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<recurrence>' . $num_answers . '</recurrence>' . K_NEWLINE;
$perc = 0;
if ($num_all_answers > 0) {
$perc = $num_answers / $num_all_answers;
}
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<recurrence_percent>' . F_formatXMLPercentage($perc) . '</recurrence_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<correct>' . $right_answers . '</correct>' . K_NEWLINE;
$perc = 0;
//.........这里部分代码省略.........
示例9: F_csv_export_result_allusers
//.........这里部分代码省略.........
$sqlr .= ' AND testuser_user_id IN (
SELECT usrgrp_user_id
FROM ' . K_TABLE_USERGROUP . '
WHERE usrgrp_group_id=' . $group_id . '
)';
}
if ($_SESSION['session_user_level'] < K_AUTH_ADMINISTRATOR) {
$sqlr .= ' AND (user_level<' . $_SESSION['session_user_level'] . ' OR user_id=' . $_SESSION['session_user_id'] . ')';
}
$sqlr .= ' GROUP BY testuser_id, testuser_creation_time, user_id, user_lastname, user_firstname, user_name
ORDER BY ' . $order_field . '';
if ($rr = F_db_query($sqlr, $db)) {
$itemcount = 0;
while ($mr = F_db_fetch_array($rr)) {
$itemcount++;
$csv .= K_NEWLINE . $itemcount;
$csv .= K_TAB . $mr['testuser_creation_time'];
$csv .= K_TAB . $mr['testuser_end_time'];
$time_diff = strtotime($mr['testuser_end_time']) - strtotime($mr['testuser_creation_time']);
//sec
$time_diff = gmdate('H:i:s', $time_diff);
$csv .= K_TAB . $time_diff;
$csv .= K_TAB . $mr['user_lastname'];
$csv .= K_TAB . $mr['user_firstname'];
$csv .= K_TAB . $mr['user_name'];
$usrtestdata = F_getUserTestStat($test_id, $mr['user_id']);
$halfscore = $usrtestdata['max_score'] / 2;
if ($usrtestdata['score_threshold'] > 0) {
if ($usrtestdata['score'] >= $usrtestdata['score_threshold']) {
$csv .= K_TAB . 'true';
$passed++;
} else {
$csv .= K_TAB . 'false';
}
} else {
$csv .= K_TAB;
if ($usrtestdata['score'] > $halfscore) {
$passed++;
}
}
$csv .= K_TAB . $mr['total_score'];
$csv .= K_TAB . $usrtestdata['right'];
$csv .= K_TAB . $usrtestdata['wrong'];
$csv .= K_TAB . $usrtestdata['unanswered'];
$csv .= K_TAB . $usrtestdata['undisplayed'];
$csv .= K_TAB . $usrtestdata['unrated'];
$csv .= K_TAB . F_compact_string(htmlspecialchars($usrtestdata['comment'], ENT_NOQUOTES, $l['a_meta_charset']));
// collects data for descriptive statistics
$statsdata['score'][] = $mr['total_score'] / $usrtestdata['max_score'];
$statsdata['right'][] = $usrtestdata['right'] / $usrtestdata['all'];
$statsdata['wrong'][] = $usrtestdata['wrong'] / $usrtestdata['all'];
$statsdata['unanswered'][] = $usrtestdata['unanswered'] / $usrtestdata['all'];
$statsdata['undisplayed'][] = $usrtestdata['undisplayed'] / $usrtestdata['all'];
$statsdata['unrated'][] = $usrtestdata['unrated'] / $usrtestdata['all'];
}
} else {
F_display_db_error();
}
$csv .= K_NEWLINE;
// separator
// calculate statistics
$stats = F_getArrayStatistics($statsdata);
$excludestat = array('sum', 'variance');
$calcpercent = array('mean', 'median', 'mode', 'minimum', 'maximum', 'range', 'standard_deviation');
$csv .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . 'passed_total' . K_TAB . $passed . K_NEWLINE;
$csv .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . 'passed_percent [%]' . K_TAB . round(100 * ($passed / $itemcount)) . K_NEWLINE;
$csv .= K_NEWLINE;
// separator
$csv .= $l['w_statistics'] . K_NEWLINE;
// separator
// headers
$csv .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB;
$csv .= $l['w_score'] . K_TAB;
$csv .= $l['w_answers_right_th'] . K_TAB;
$csv .= $l['w_answers_wrong_th'] . K_TAB;
$csv .= $l['w_questions_unanswered_th'] . K_TAB;
$csv .= $l['w_questions_undisplayed_th'] . K_TAB;
$csv .= $l['w_questions_unrated'] . K_NEWLINE;
foreach ($stats as $row => $columns) {
if (!in_array($row, $excludestat)) {
$csv .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . $l['w_' . $row] . K_TAB;
$csv .= round($columns['score'], 3) . K_TAB;
$csv .= round($columns['right'], 3) . K_TAB;
$csv .= round($columns['wrong'], 3) . K_TAB;
$csv .= round($columns['unanswered'], 3) . K_TAB;
$csv .= round($columns['undisplayed'], 3) . K_TAB;
$csv .= round($columns['unrated'], 3) . K_NEWLINE;
if (in_array($row, $calcpercent)) {
$csv .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . $row . ' [%]' . K_TAB;
$csv .= round(100 * ($columns['score'] / $usrtestdata['max_score'])) . K_TAB;
$csv .= round(100 * ($columns['right'] / $usrtestdata['all'])) . K_TAB;
$csv .= round(100 * ($columns['wrong'] / $usrtestdata['all'])) . K_TAB;
$csv .= round(100 * ($columns['unanswered'] / $usrtestdata['all'])) . K_TAB;
$csv .= round(100 * ($columns['undisplayed'] / $usrtestdata['all'])) . K_TAB;
$csv .= round(100 * ($columns['unrated'] / $usrtestdata['all'])) . K_NEWLINE;
}
}
}
return $csv;
}
示例10: F_getTestSSLCerts
/**
* Get a comma separated list of valid SSL certificates IDs for the selected test.
* @param $test_id (int) ID of the selected test
* @return string containing a comma separated list SSL certificates IDs.
*/
function F_getTestSSLCerts($test_id)
{
require_once '../config/tce_config.php';
global $db, $l;
$test_id = intval($test_id);
$ids = '0';
// select SSL certificates in this test
$sql = 'SELECT tstssl_ssl_id FROM ' . K_TABLE_TEST_SSLCERTS . ' WHERE tstssl_test_id=' . $test_id . ' ORDER BY tstssl_ssl_id';
if ($r = F_db_query($sql, $db)) {
while ($m = F_db_fetch_assoc($r)) {
$ids .= ',' . $m['tstssl_ssl_id'];
}
} else {
F_display_db_error();
}
return $ids;
}
示例11: printUserTestDetails
//.........这里部分代码省略.........
if (isset($m['testlog_reaction_time']) and strlen($m['testlog_reaction_time']) > 0) {
$reaction_time = $m['testlog_reaction_time'] / 1000;
} else {
$reaction_time = '';
}
$this->Cell($tce_data_cell_width + $tce_data_cell_width_third, $this->tce_data_cell_height, $display_time, 1, 0, 'C', 0);
$this->Cell($tce_data_cell_width + $tce_data_cell_width_third, $this->tce_data_cell_height, $change_time, 1, 0, 'C', 0);
$this->Cell($tce_data_cell_width, $this->tce_data_cell_height, $diff_time, 1, 0, 'C', 0);
$this->Cell($tce_data_cell_width, $this->tce_data_cell_height, $reaction_time, 1, 1, 'C', 0);
$this->writeHTMLCell(0, $this->tce_data_cell_height, PDF_MARGIN_LEFT + $tce_data_cell_width_third, $this->GetY(), F_decode_tcecode($m['question_description']), 1, 1);
if (K_ENABLE_QUESTION_EXPLANATION and !empty($m['question_explanation'])) {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, '', 0, 0, 'C', 0);
$this->SetFont('', 'BIU');
$this->Cell(0, $this->tce_data_cell_height, $l['w_explanation'], 'LTR', 1, '', 0, '', 0);
$this->SetFont('', '');
$this->writeHTMLCell(0, $this->tce_data_cell_height, PDF_MARGIN_LEFT + $tce_data_cell_width_third, $this->GetY(), F_decode_tcecode($m['question_explanation']), 'LRB', 1, '', '');
}
if ($m['question_type'] == 3) {
// free-text question - print user text answer
$this->writeHTMLCell(0, $this->tce_data_cell_height, PDF_MARGIN_LEFT + 2 * $tce_data_cell_width_third, $this->GetY(), F_decode_tcecode($m['testlog_answer_text']), 1, 1);
} else {
// display each answer option
$sqla = 'SELECT * FROM ' . K_TABLE_LOG_ANSWER . ', ' . K_TABLE_ANSWERS . ' WHERE logansw_answer_id=answer_id AND logansw_testlog_id=' . $m['testlog_id'] . ' ORDER BY logansw_order';
if ($ra = F_db_query($sqla, $db)) {
$idx = 0;
// count items
while ($ma = F_db_fetch_array($ra)) {
$posfill = 0;
$idx++;
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, '', 0, 0, 'C', 0);
if ($m['question_type'] == 4) {
if ($ma['logansw_position'] > 0) {
if ($ma['logansw_position'] == $ma['answer_position']) {
$posfill = 1;
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, $ma['logansw_position'], 1, 0, 'C', 1);
} else {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, $ma['logansw_position'], 1, 0, 'C', 0);
}
} else {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, ' ', 1, 0, 'C', 0);
}
} elseif ($ma['logansw_selected'] > 0) {
// selected
if (F_getBoolean($ma['answer_isright'])) {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, '+', 1, 0, 'C', 1);
} else {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, '-', 1, 0, 'C', 1);
}
} elseif ($m['question_type'] == 1) {
// MCSA
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, ' ', 1, 0, 'C', 0);
} else {
if ($ma['logansw_selected'] == 0) {
// unselected
if (F_getBoolean($ma['answer_isright'])) {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, '-', 1, 0, 'C', 0);
} else {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, '+', 1, 0, 'C', 0);
}
} else {
// no answer
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, ' ', 1, 0, 'C', 0);
}
}
if ($m['question_type'] == 4) {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, $ma['answer_position'], 1, 0, 'C', $posfill);
} elseif (F_getBoolean($ma['answer_isright'])) {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, $idx, 1, 0, 'C', 1);
} else {
$this->Cell($tce_data_cell_width_third, $this->tce_data_cell_height, $idx, 1, 0, 'C', 0);
}
$this->writeHTMLCell(0, $this->tce_data_cell_height, PDF_MARGIN_LEFT + $tce_data_cell_width, $this->GetY(), F_decode_tcecode($ma['answer_description']), 'LRTB', 1);
if (K_ENABLE_ANSWER_EXPLANATION and !empty($ma['answer_explanation'])) {
$this->Cell(3 * $tce_data_cell_width_third, $this->tce_data_cell_height, '', 0, 0, 'C', 0);
$this->SetFont('', 'BIU');
$this->Cell(0, $this->tce_data_cell_height, $l['w_explanation'], 'LTR', 1, '', 0, '', 0);
$this->SetFont('', '');
$this->writeHTMLCell(0, $this->tce_data_cell_height, PDF_MARGIN_LEFT + 3 * $tce_data_cell_width_third, $this->GetY(), F_decode_tcecode($ma['answer_explanation']), 'LRB', 1, '', '');
}
}
} else {
F_display_db_error();
}
}
// end multiple answers
if (strlen($m['testlog_comment']) > 0) {
// teacher / supervisor comment
$this->SetTextColor(255, 0, 0);
$this->writeHTMLCell(0, $this->tce_data_cell_height, PDF_MARGIN_LEFT + 2 * $tce_data_cell_width_third, $this->GetY(), F_decode_tcecode($m['testlog_comment']), 'LRTB', 1);
$this->SetTextColor(0, 0, 0);
}
$this->Ln($this->tce_data_cell_height);
$itemcount++;
}
} else {
F_display_db_error();
}
$stats = F_getTestStat($data['test']['test_id'], 0, $data['user_id'], 0, 0, $data['id']);
$this->printQuestionStats($stats['qstats'], 1);
}
示例12: F_show_select_test_popup
//.........这里部分代码省略.........
$numalign = 'right';
}
$order_field = F_escape_sql($db, $order_field);
$orderdir = intval($orderdir);
$firstrow = intval($firstrow);
$rowsperpage = intval($rowsperpage);
if (empty($order_field) or !in_array($order_field, array('test_name', 'test_description', 'test_begin_time', 'test_end_time', 'test_duration_time', 'test_ip_range', 'test_results_to_users', 'test_report_to_users', 'test_score_right', 'test_score_wrong', 'test_score_unanswered', 'test_max_score', 'test_user_id', 'test_score_threshold', 'test_random_questions_select', 'test_random_questions_order', 'test_questions_order_mode', 'test_random_answers_select', 'test_random_answers_order', 'test_answers_order_mode', 'test_comment_enabled', 'test_menu_enabled', 'test_noanswer_enabled', 'test_mcma_radio', 'test_repeatable', 'test_mcma_partial_score', 'test_logout_on_timeout'))) {
$order_field = 'test_begin_time DESC,test_name';
}
if ($orderdir == 0) {
$nextorderdir = 1;
$full_order_field = $order_field;
} else {
$nextorderdir = 0;
$full_order_field = $order_field . ' DESC';
}
if (!F_count_rows(K_TABLE_TESTS)) {
// if the table is void (no items) display message
F_print_error('MESSAGE', $l['m_databasempty']);
return FALSE;
}
$wherequery = '';
if (empty($wherequery)) {
$wherequery = ' WHERE';
} else {
$wherequery .= ' AND';
}
$wherequery .= ' (test_id>0)';
if ($_SESSION['session_user_level'] < K_AUTH_ADMINISTRATOR) {
$wherequery .= ' AND test_user_id IN (' . F_getAuthorizedUsers($_SESSION['session_user_id']) . ')';
}
if (!empty($andwhere)) {
$wherequery .= ' AND (' . $andwhere . ')';
}
$sql = 'SELECT * FROM ' . K_TABLE_TESTS . $wherequery . ' ORDER BY ' . $full_order_field;
if (K_DATABASE_TYPE == 'ORACLE') {
$sql = 'SELECT * FROM (' . $sql . ') WHERE rownum BETWEEN ' . $firstrow . ' AND ' . ($firstrow + $rowsperpage) . '';
} else {
$sql .= ' LIMIT ' . $rowsperpage . ' OFFSET ' . $firstrow . '';
}
if ($r = F_db_query($sql, $db)) {
if ($m = F_db_fetch_array($r)) {
// -- Table structure with links:
echo '<div class="container">';
echo '<table class="userselect" style="font-size:80%;">' . K_NEWLINE;
// table header
echo '<tr>' . K_NEWLINE;
if (strlen($searchterms) > 0) {
$filter .= '&searchterms=' . urlencode($searchterms);
}
echo F_select_table_header_element('test_begin_time', $nextorderdir, $l['w_time_begin'] . ' ' . $l['w_datetime_format'], $l['w_time_begin'], $order_field, $filter);
echo F_select_table_header_element('test_end_time', $nextorderdir, $l['w_time_end'] . ' ' . $l['w_datetime_format'], $l['w_time_end'], $order_field, $filter);
echo F_select_table_header_element('test_name', $nextorderdir, $l['h_test_name'], $l['w_name'], $order_field, $filter);
echo F_select_table_header_element('test_description', $nextorderdir, $l['h_test_description'], $l['w_description'], $order_field, $filter);
echo '</tr>' . K_NEWLINE;
$itemcount = 0;
do {
$itemcount++;
// on click the user ID will be returned on the calling form field
$jsaction = 'javascript:window.opener.document.getElementById(\'' . $cid . '\').value=' . $m['test_id'] . ';';
$jsaction .= 'window.opener.document.getElementById(\'' . $cid . '\').onchange();';
$jsaction .= 'window.close();';
echo '<tr>' . K_NEWLINE;
echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['test_begin_time'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE;
echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['test_end_time'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE;
echo '<td style="text-align:' . $txtalign . ';"> <a href="#" onclick="' . $jsaction . '" title="[' . $l['w_select'] . ']">' . htmlspecialchars($m['test_name'], ENT_NOQUOTES, $l['a_meta_charset']) . '</a></td>' . K_NEWLINE;
echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['test_description'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE;
echo '</tr>' . K_NEWLINE;
} while ($m = F_db_fetch_array($r));
echo '</table>' . K_NEWLINE;
echo '<input type="hidden" name="order_field" id="order_field" value="' . $order_field . '" />' . K_NEWLINE;
echo '<input type="hidden" name="orderdir" id="orderdir" value="' . $orderdir . '" />' . K_NEWLINE;
echo '<input type="hidden" name="firstrow" id="firstrow" value="' . $firstrow . '" />' . K_NEWLINE;
echo '<input type="hidden" name="rowsperpage" id="rowsperpage" value="' . $rowsperpage . '" />' . K_NEWLINE;
echo '<div class="row"><hr /></div>' . K_NEWLINE;
// ---------------------------------------------------------------
// -- page jumper (menu for successive pages)
if ($rowsperpage > 0) {
$sql = 'SELECT count(*) AS total FROM ' . K_TABLE_TESTS . '' . $wherequery . '';
if (!empty($order_field)) {
$param_array = '&order_field=' . urlencode($order_field) . '';
}
if (!empty($orderdir)) {
$param_array .= '&orderdir=' . $orderdir . '';
}
if (!empty($searchterms)) {
$param_array .= '&searchterms=' . urlencode($searchterms) . '';
}
$param_array .= '&submitted=1';
F_show_page_navigator($_SERVER['SCRIPT_NAME'], $sql, $firstrow, $rowsperpage, $param_array);
}
echo '</div>' . K_NEWLINE;
} else {
F_print_error('MESSAGE', $l['m_search_void']);
}
} else {
F_display_db_error();
}
return TRUE;
}
示例13: F_xml_export_questions
//.........这里部分代码省略.........
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<name>';
$xml .= F_text_to_xml($ms['subject_name']);
$xml .= '</name>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<description>';
$xml .= F_text_to_xml($ms['subject_description']);
$xml .= '</description>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<enabled>';
$xml .= $boolean[intval(F_getBoolean($ms['subject_enabled']))];
$xml .= '</enabled>' . K_NEWLINE;
// ---- questions
$sql = 'SELECT *
FROM ' . K_TABLE_QUESTIONS . '
WHERE question_subject_id=' . $ms['subject_id'] . '
ORDER BY question_enabled DESC, question_position, question_description';
if ($r = F_db_query($sql, $db)) {
while ($m = F_db_fetch_array($r)) {
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '<question>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<enabled>';
$xml .= $boolean[intval(F_getBoolean($m['question_enabled']))];
$xml .= '</enabled>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<type>';
$xml .= $type[$m['question_type'] - 1];
$xml .= '</type>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<difficulty>';
$xml .= $m['question_difficulty'];
$xml .= '</difficulty>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<position>';
$xml .= $m['question_position'];
$xml .= '</position>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<timer>';
$xml .= $m['question_timer'];
$xml .= '</timer>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<fullscreen>';
$xml .= $boolean[intval(F_getBoolean($m['question_fullscreen']))];
$xml .= '</fullscreen>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<inline_answers>';
$xml .= $boolean[intval(F_getBoolean($m['question_inline_answers']))];
$xml .= '</inline_answers>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<auto_next>';
$xml .= $boolean[intval(F_getBoolean($m['question_auto_next']))];
$xml .= '</auto_next>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<description>';
$xml .= F_text_to_xml($m['question_description']);
$xml .= '</description>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<explanation>';
$xml .= F_text_to_xml($m['question_explanation']);
$xml .= '</explanation>' . K_NEWLINE;
// display alternative answers
$sqla = 'SELECT *
FROM ' . K_TABLE_ANSWERS . '
WHERE answer_question_id=\'' . $m['question_id'] . '\'
ORDER BY answer_position,answer_isright DESC';
if ($ra = F_db_query($sqla, $db)) {
while ($ma = F_db_fetch_array($ra)) {
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<answer>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<enabled>';
$xml .= $boolean[intval(F_getBoolean($ma['answer_enabled']))];
$xml .= '</enabled>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<isright>';
$xml .= $boolean[intval(F_getBoolean($ma['answer_isright']))];
$xml .= '</isright>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<position>';
$xml .= $ma['answer_position'];
$xml .= '</position>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<keyboard_key>';
$xml .= $ma['answer_keyboard_key'];
$xml .= '</keyboard_key>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<description>';
$xml .= F_text_to_xml($ma['answer_description']);
$xml .= '</description>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '<explanation>';
$xml .= F_text_to_xml($ma['answer_explanation']);
$xml .= '</explanation>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . K_TAB . '</answer>' . K_NEWLINE;
}
} else {
F_display_db_error();
}
$xml .= K_TAB . K_TAB . K_TAB . K_TAB . '</question>' . K_NEWLINE;
}
// end while for questions
} else {
F_display_db_error();
}
$xml .= K_TAB . K_TAB . K_TAB . '</subject>' . K_NEWLINE;
}
// end while for topics
} else {
F_display_db_error();
}
$xml .= K_TAB . K_TAB . '</module>' . K_NEWLINE;
}
// end while for module
} else {
F_display_db_error();
}
$xml .= K_TAB . '</body>' . K_NEWLINE;
$xml .= '</tcexamquestions>' . K_NEWLINE;
return $xml;
}
示例14: F_show_select_questions
//.........这里部分代码省略.........
$answlist .= '<acronym class="offbox" title="' . $l['w_disabled'] . '">-</acronym>';
}
if ($m['question_type'] != 4) {
if (F_getBoolean($ma['answer_isright'])) {
$answlist .= ' <acronym class="okbox" title="' . $l['h_answer_right'] . '">T</acronym>';
} else {
$answlist .= ' <acronym class="nobox" title="' . $l['h_answer_wrong'] . '">F</acronym>';
}
}
if ($ma['answer_position'] > 0) {
$answlist .= ' <acronym class="onbox" title="' . $l['h_position'] . '">' . intval($ma['answer_position']) . '</acronym>';
} else {
$answlist .= ' <acronym class="offbox" title="' . $l['h_position'] . '"> </acronym>';
}
if ($ma['answer_keyboard_key'] > 0) {
$answlist .= ' <acronym class="onbox" title="' . $l['h_answer_keyboard_key'] . '">' . F_text_to_xml(chr($ma['answer_keyboard_key'])) . '</acronym>';
} else {
$answlist .= ' <acronym class="offbox" title="' . $l['h_answer_keyboard_key'] . '"> </acronym>';
}
$answlist .= ' <a href="tce_edit_answer.php?subject_module_id=' . $subject_module_id . '&question_subject_id=' . $subject_id . '&answer_question_id=' . $m['question_id'] . '&answer_id=' . $ma['answer_id'] . '" title="' . $l['t_answers_editor'] . ' [ID = ' . $ma['answer_id'] . ']" class="xmlbutton">' . $l['w_edit'] . '</a>';
//$answlist .= " ";
//$answlist .= "".F_decode_tcecode($ma['answer_description'])."";
$answlist .= '<br /><br />' . K_NEWLINE;
$answlist .= '<div class="paddingleft">' . F_decode_tcecode($ma['answer_description']) . '</div>' . K_NEWLINE;
if (K_ENABLE_ANSWER_EXPLANATION and !empty($ma['answer_explanation'])) {
$answlist .= '<div class="paddingleft"><br /><span class="explanation">' . $l['w_explanation'] . ':</span><br />' . F_decode_tcecode($ma['answer_explanation']) . '</div>' . K_NEWLINE;
}
$answlist .= '</li>' . K_NEWLINE;
}
if (strlen($answlist) > 0) {
$questlist .= "<ol class=\"answer\">\n" . $answlist . "</ol><br /><br />\n";
}
} else {
F_display_db_error();
}
}
// end if hide_answers
$questlist .= '</li>' . K_NEWLINE;
}
if (strlen($questlist) > 0) {
// display the list
echo '<ul class="question">' . K_NEWLINE;
echo $questlist;
echo '</ul>' . K_NEWLINE;
echo '<div class="row"><hr /></div>' . K_NEWLINE;
// check/uncheck all options
echo '<span dir="' . $l['a_meta_dir'] . '">';
echo '<input type="radio" name="checkall" id="checkall1" value="1" onclick="document.getElementById(\'form_selectquestions\').submit()" />';
echo '<label for="checkall1">' . $l['w_check_all'] . '</label> ';
echo '<input type="radio" name="checkall" id="checkall0" value="0" onclick="document.getElementById(\'form_selectquestions\').submit()" />';
echo '<label for="checkall0">' . $l['w_uncheck_all'] . '</label>';
echo '</span>' . K_NEWLINE;
echo ' ';
if ($l['a_meta_dir'] == 'rtl') {
$arr = '←';
} else {
$arr = '→';
}
// action options
echo '<select name="menu_action" id="menu_action" size="0">' . K_NEWLINE;
echo '<option value="0" style="color:gray">' . $l['m_with_selected'] . '</option>' . K_NEWLINE;
echo '<option value="enable">' . $l['w_enable'] . '</option>' . K_NEWLINE;
echo '<option value="disable">' . $l['w_disable'] . '</option>' . K_NEWLINE;
echo '<option value="delete">' . $l['w_delete'] . '</option>' . K_NEWLINE;
echo '<option value="copy">' . $l['w_copy'] . ' ' . $arr . '</option>' . K_NEWLINE;
echo '<option value="move">' . $l['w_move'] . ' ' . $arr . '</option>' . K_NEWLINE;
示例15: F_xml_export_user_results
/**
* Export user results in XML format.
* @param $user_id (int) user ID - if greater than zero, filter stats for the specified user.
* @param $startdate (string) start date ID - if greater than zero, filter stats for the specified starting date
* @param $enddate (string) end date ID - if greater than zero, filter stats for the specified ending date
* @param $order_field (string) Ordering fields for SQL query.
* @author Nicola Asuni
* @return XML data
*/
function F_xml_export_user_results($user_id, $startdate, $enddate, $order_field)
{
global $l, $db;
require_once '../config/tce_config.php';
// define symbols for answers list
$qtype = array('S', 'M', 'T', 'O');
// question types
$type = array('single', 'multiple', 'text', 'ordering');
$boolean = array('false', 'true');
$xml = '';
// XML data to be returned
$xml .= '<' . '?xml version="1.0" encoding="UTF-8" ?' . '>' . K_NEWLINE;
$xml .= '<tcexamuserresults version="' . K_TCEXAM_VERSION . '">' . K_NEWLINE;
$xml .= K_TAB . '<header';
$xml .= ' lang="' . K_USER_LANG . '"';
$xml .= ' date="' . date(K_TIMESTAMP_FORMAT) . '">' . K_NEWLINE;
$xml .= K_TAB . K_TAB . '<user_id>' . $user_id . '</user_id>' . K_NEWLINE;
$sql = 'SELECT user_name, user_lastname, user_firstname FROM ' . K_TABLE_USERS . ' WHERE user_id=' . $user_id . '';
if ($r = F_db_query($sql, $db)) {
if ($m = F_db_fetch_array($r)) {
$xml .= K_TAB . K_TAB . '<user_name>' . $m['user_name'] . '</user_name>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . '<user_lastname>' . $m['user_lastname'] . '</user_lastname>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . '<user_firstname>' . $m['user_firstname'] . '</user_firstname>' . K_NEWLINE;
}
} else {
F_display_db_error();
}
$xml .= K_TAB . K_TAB . '<date_from>' . $startdate . '</date_from>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . '<date_to>' . $enddate . '</date_to>' . K_NEWLINE;
$xml .= K_TAB . '</header>' . K_NEWLINE;
$xml .= K_TAB . '<body>' . K_NEWLINE;
$statsdata = array();
$statsdata['score'] = array();
$statsdata['right'] = array();
$statsdata['wrong'] = array();
$statsdata['unanswered'] = array();
$statsdata['undisplayed'] = array();
$statsdata['unrated'] = array();
$sql = 'SELECT
testuser_id,
test_id,
test_name,
testuser_creation_time,
testuser_status,
SUM(testlog_score) AS total_score,
MAX(testlog_change_time) AS testuser_end_time
FROM ' . K_TABLE_TESTS_LOGS . ', ' . K_TABLE_TEST_USER . ', ' . K_TABLE_TESTS . '
WHERE testuser_status>0
AND testuser_creation_time>=\'' . F_escape_sql($db, $startdate) . '\'
AND testuser_creation_time<=\'' . F_escape_sql($db, $enddate) . '\'
AND testuser_user_id=' . $user_id . '
AND testlog_testuser_id=testuser_id
AND testuser_test_id=test_id';
if ($_SESSION['session_user_level'] < K_AUTH_ADMINISTRATOR) {
$sql .= ' AND test_user_id IN (' . F_getAuthorizedUsers($_SESSION['session_user_id']) . ')';
}
$sql .= ' GROUP BY testuser_id, test_id, test_name, testuser_creation_time, testuser_status ORDER BY ' . F_escape_sql($db, $order_field) . '';
if ($r = F_db_query($sql, $db)) {
$passed = 0;
while ($m = F_db_fetch_array($r)) {
$testuser_id = $m['testuser_id'];
$usrtestdata = F_getUserTestStat($m['test_id'], $user_id);
$halfscore = $usrtestdata['max_score'] / 2;
$xml .= K_TAB . K_TAB . '<test id=\'' . $m['test_id'] . '\'>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<start_time>' . $m['testuser_creation_time'] . '</start_time>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<end_time>' . $m['testuser_end_time'] . '</end_time>' . K_NEWLINE;
$time_diff = strtotime($m['testuser_end_time']) - strtotime($m['testuser_creation_time']);
//sec
$time_diff = gmdate('H:i:s', $time_diff);
$xml .= K_TAB . K_TAB . K_TAB . '<time>' . $time_diff . '</time>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<name>' . F_text_to_xml($m['test_name']) . '</name>' . K_NEWLINE;
if ($usrtestdata['score_threshold'] > 0) {
if ($usrtestdata['score'] >= $usrtestdata['score_threshold']) {
$xml .= K_TAB . K_TAB . K_TAB . '<passed>true</passed>' . K_NEWLINE;
$passed++;
} else {
$xml .= K_TAB . K_TAB . K_TAB . '<passed>false</passed>' . K_NEWLINE;
}
} elseif ($usrtestdata['score'] > $halfscore) {
$passed++;
}
$xml .= K_TAB . K_TAB . K_TAB . '<score>' . round($m['total_score'], 3) . '</score>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<score_percent>' . round(100 * $usrtestdata['score'] / $usrtestdata['max_score']) . '</score_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<right>' . $usrtestdata['right'] . '</right>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<right_percent>' . round(100 * $usrtestdata['right'] / $usrtestdata['all']) . '</right_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<wrong>' . $usrtestdata['wrong'] . '</wrong>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<wrong_percent>' . round(100 * $usrtestdata['wrong'] / $usrtestdata['all']) . '</wrong_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<unanswered>' . $usrtestdata['unanswered'] . '</unanswered>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<unanswered_percent>' . round(100 * $usrtestdata['unanswered'] / $usrtestdata['all']) . '</unanswered_percent>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<undisplayed>' . $usrtestdata['undisplayed'] . '</undisplayed>' . K_NEWLINE;
$xml .= K_TAB . K_TAB . K_TAB . '<undisplayed_percent>' . round(100 * $usrtestdata['undisplayed'] / $usrtestdata['all']) . '</undisplayed_percent>' . K_NEWLINE;
//.........这里部分代码省略.........