/** * Display user selection XHTML table (popup mode). * @author Nicola Asuni * @since 2012-04-14 * @param $order_field (string) Order by column name. * @param $orderdir (int) Order direction. * @param $firstrow (int) Number of first row to display. * @param $rowsperpage (int) Number of rows per page. * @param $group_id (int) ID of the group (default = 0 = no specific group selected). * @param $andwhere (string) Additional SQL WHERE query conditions. * @param $searchterms (string) Search terms. * @param string $cid ID of the calling form field. * @return false in case of empty database, true otherwise */ function F_show_select_user_popup($order_field, $orderdir, $firstrow, $rowsperpage, $group_id = 0, $andwhere = '', $searchterms = '', $cid = 0) { global $l, $db; require_once '../config/tce_config.php'; require_once '../../shared/code/tce_functions_page.php'; require_once '../../shared/code/tce_functions_form.php'; $filter = 'cid=' . $cid; if ($l['a_meta_dir'] == 'rtl') { $txtalign = 'right'; $numalign = 'left'; } else { $txtalign = 'left'; $numalign = 'right'; } $order_field = F_escape_sql($db, $order_field); $orderdir = intval($orderdir); $firstrow = intval($firstrow); $rowsperpage = intval($rowsperpage); $group_id = intval($group_id); if (empty($order_field) or !in_array($order_field, array('user_id', 'user_name', 'user_password', 'user_email', 'user_regdate', 'user_ip', 'user_firstname', 'user_lastname', 'user_birthdate', 'user_birthplace', 'user_regnumber', 'user_ssn', 'user_level', 'user_verifycode'))) { $order_field = 'user_lastname,user_firstname'; } 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_USERS)) { // if the table is void (no items) display message F_print_error('MESSAGE', $l['m_databasempty']); return FALSE; } $wherequery = ''; if ($group_id > 0) { $wherequery = ', ' . K_TABLE_USERGROUP . ' WHERE user_id=usrgrp_user_id AND usrgrp_group_id=' . $group_id . ''; $filter .= '&group_id=' . $group_id . ''; } if (empty($wherequery)) { $wherequery = ' WHERE'; } else { $wherequery .= ' AND'; } $wherequery .= ' (user_id>1)'; if ($_SESSION['session_user_level'] < K_AUTH_ADMINISTRATOR) { // filter for level $wherequery .= ' AND ((user_level<' . $_SESSION['session_user_level'] . ') OR (user_id=' . $_SESSION['session_user_id'] . '))'; // filter for groups $wherequery .= ' 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)'; } if (!empty($andwhere)) { $wherequery .= ' AND (' . $andwhere . ')'; } $sql = 'SELECT * FROM ' . K_TABLE_USERS . $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('user_name', $nextorderdir, $l['h_login_name'], $l['w_user'], $order_field, $filter); echo F_select_table_header_element('user_lastname', $nextorderdir, $l['h_lastname'], $l['w_lastname'], $order_field, $filter); echo F_select_table_header_element('user_firstname', $nextorderdir, $l['h_firstname'], $l['w_firstname'], $order_field, $filter); echo F_select_table_header_element('user_email', $nextorderdir, $l['h_email'], $l['w_email'], $order_field, $filter); echo F_select_table_header_element('user_regnumber', $nextorderdir, $l['h_regcode'], $l['w_regcode'], $order_field, $filter); echo F_select_table_header_element('user_level', $nextorderdir, $l['h_level'], $l['w_level'], $order_field, $filter); echo F_select_table_header_element('user_regdate', $nextorderdir, $l['h_regdate'], $l['w_regdate'], $order_field, $filter); //echo '<th title="'.$l['h_group_name'].'">'.$l['w_groups'].'</th>'.K_NEWLINE; 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['user_id'] . ';'; $jsaction .= 'window.opener.document.getElementById(\'' . $cid . '\').onchange();'; $jsaction .= 'window.close();'; echo '<tr>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> <a href="#" onclick="' . $jsaction . '" title="[' . $l['w_select'] . ']">' . htmlspecialchars($m['user_name'], ENT_NOQUOTES, $l['a_meta_charset']) . '</a></td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['user_lastname'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['user_firstname'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['user_email'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['user_regnumber'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; echo '<td> ' . $m['user_level'] . '</td>' . K_NEWLINE; echo '<td> ' . htmlspecialchars($m['user_regdate'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; /* // comma separated list of user's groups $grp = ''; $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(); } echo '<td style="text-align:'.$txtalign.';"> '.htmlspecialchars(substr($grp,0,-2), 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_USERS . '' . $wherequery . ''; if (!empty($order_field)) { $param_array = '&order_field=' . urlencode($order_field) . ''; } if (!empty($orderdir)) { $param_array .= '&orderdir=' . $orderdir . ''; } if (!empty($group_id)) { $param_array .= '&group_id=' . $group_id . ''; } 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 class="pagehelp">'.$l['hp_select_users'].'</div>'.K_NEWLINE; echo '</div>' . K_NEWLINE; } else { F_print_error('MESSAGE', $l['m_search_void']); } } else { F_display_db_error(); } return TRUE; }
if ($l['a_meta_dir'] == 'rtl') { $tdalignr = 'left'; $tdalign = 'right'; } else { $tdalignr = 'right'; $tdalign = 'left'; } echo '<th> </th>' . K_NEWLINE; echo '<th>#</th>' . K_NEWLINE; echo F_select_table_header_element('testuser_creation_time', $nextorderdir, $l['h_time_begin'], $l['w_time_begin'], $order_field, $filter); //echo F_select_table_header_element('testuser_end_time', $nextorderdir, $l['h_time_end'], $l['w_time_end'], $order_field, $filter); echo '<th title="' . $l['h_test_time'] . '">' . $l['w_time'] . '</th>' . K_NEWLINE; echo F_select_table_header_element('user_name', $nextorderdir, $l['h_login_name'], $l['w_user'], $order_field, $filter); echo F_select_table_header_element('user_lastname', $nextorderdir, $l['h_lastname'], $l['w_lastname'], $order_field, $filter); echo F_select_table_header_element('user_firstname', $nextorderdir, $l['h_firstname'], $l['w_firstname'], $order_field, $filter); echo F_select_table_header_element('total_score', $nextorderdir, $l['h_score_total'], $l['w_score'], $order_field, $filter); echo '<th title="' . $l['h_answers_right'] . '">' . $l['w_answers_right'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_answers_wrong'] . '">' . $l['w_answers_wrong'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_questions_unanswered'] . '">' . $l['w_questions_unanswered'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_questions_undisplayed'] . '">' . $l['w_questions_undisplayed'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_questions_unrated'] . '">' . $l['w_questions_unrated'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['w_status'] . ' (' . $l['w_time'] . ' [' . $l['w_minutes'] . '])">' . $l['w_status'] . ' (' . $l['w_time'] . ' [' . $l['w_minutes'] . '])</th>' . K_NEWLINE; echo '<th title="' . $l['h_testcomment'] . '">' . $l['w_comment'] . '</th>' . K_NEWLINE; echo '</tr>' . K_NEWLINE; // output users stats $sqlr = 'SELECT testuser_id, testuser_creation_time, testuser_status, user_id, user_lastname,
/** * Display user selection XHTML table. * @author Nicola Asuni * @since 2001-09-13 * @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 * @param $group_id (int) id of the group (default = 0 = no specific group selected) * @param $andwhere (string) additional SQL WHERE query conditions * @param $searchterms (string) search terms * @return false in case of empty database, true otherwise */ function F_show_select_user($order_field, $orderdir, $firstrow, $rowsperpage, $group_id = 0, $andwhere = '', $searchterms = '') { global $l, $db; require_once '../config/tce_config.php'; require_once '../../shared/code/tce_functions_page.php'; require_once '../../shared/code/tce_functions_form.php'; $filter = ''; if ($l['a_meta_dir'] == 'rtl') { $txtalign = 'right'; $numalign = 'left'; } else { $txtalign = 'left'; $numalign = 'right'; } $order_field = F_escape_sql($order_field); $orderdir = intval($orderdir); $firstrow = intval($firstrow); $rowsperpage = intval($rowsperpage); $group_id = intval($group_id); if (empty($order_field) or !in_array($order_field, array('user_id', 'user_name', 'user_password', 'user_email', 'user_regdate', 'user_ip', 'user_firstname', 'user_lastname', 'user_regnumber', 'user_level', 'user_verifycode'))) { $order_field = 'user_lastname,user_firstname'; } 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_USERS)) { // if the table is void (no items) display message F_print_error('MESSAGE', $l['m_databasempty']); return FALSE; } $wherequery = ''; if ($group_id > 0) { $wherequery = ', ' . K_TABLE_USERGROUP . ' WHERE user_id=usrgrp_user_id AND usrgrp_group_id=' . $group_id . ''; $filter .= '&group_id=' . $group_id . ''; } if (empty($wherequery)) { $wherequery = ' WHERE'; } else { $wherequery .= ' AND'; } $wherequery .= ' (user_id>1)'; if ($_SESSION['session_user_level'] < K_AUTH_ADMINISTRATOR) { // filter for level $wherequery .= ' AND ((user_level<' . $_SESSION['session_user_level'] . ') OR (user_id=' . $_SESSION['session_user_id'] . '))'; // filter for groups $wherequery .= ' 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)'; } if (!empty($andwhere)) { $wherequery .= ' AND (' . $andwhere . ')'; } $sql = 'SELECT * FROM ' . K_TABLE_USERS . $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">' . K_NEWLINE; // table header echo '<tr>' . K_NEWLINE; echo '<th> </th>' . K_NEWLINE; if (strlen($searchterms) > 0) { $filter .= '&searchterms=' . urlencode($searchterms); } echo F_select_table_header_element('user_name', $nextorderdir, $l['h_login_name'], $l['w_user'], $order_field, $filter); echo F_select_table_header_element('user_lastname', $nextorderdir, $l['h_lastname'], $l['w_lastname'], $order_field, $filter); echo F_select_table_header_element('user_firstname', $nextorderdir, $l['h_firstname'], $l['w_firstname'], $order_field, $filter); echo F_select_table_header_element('user_regnumber', $nextorderdir, $l['h_regcode'], $l['w_regcode'], $order_field, $filter); echo F_select_table_header_element('user_level', $nextorderdir, $l['h_level'], $l['w_level'], $order_field, $filter); echo F_select_table_header_element('user_regdate', $nextorderdir, $l['h_regdate'], $l['w_regdate'], $order_field, $filter); echo '<th title="' . $l['h_group_name'] . '">' . $l['w_groups'] . '</th>' . K_NEWLINE; echo '</tr>' . K_NEWLINE; $itemcount = 0; do { $itemcount++; echo '<tr>' . K_NEWLINE; echo '<td>'; echo '<input type="checkbox" name="userid' . $itemcount . '" id="userid' . $itemcount . '" value="' . $m['user_id'] . '" title="' . $l['w_select'] . '"'; if (isset($_REQUEST['checkall']) and $_REQUEST['checkall'] == 1) { echo ' checked="checked"'; } echo ' />'; echo '</td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> <a href="tce_edit_user.php?user_id=' . $m['user_id'] . '" title="' . $l['w_edit'] . '">' . htmlspecialchars($m['user_name'], ENT_NOQUOTES, $l['a_meta_charset']) . '</a></td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['user_lastname'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['user_firstname'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars($m['user_regnumber'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; echo '<td> ' . $m['user_level'] . '</td>' . K_NEWLINE; echo '<td> ' . htmlspecialchars($m['user_regdate'], ENT_NOQUOTES, $l['a_meta_charset']) . '</td>' . K_NEWLINE; // comma separated list of user's groups $grp = ''; $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(); } echo '<td style="text-align:' . $txtalign . ';"> ' . htmlspecialchars(substr($grp, 0, -2), 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 '<br />' . 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; // check/uncheck all options echo '<span dir="ltr">'; echo '<input type="radio" name="checkall" id="checkall1" value="1" onclick="document.getElementById(\'form_userselect\').submit()" />'; echo '<label for="checkall1">' . $l['w_check_all'] . '</label> '; echo '<input type="radio" name="checkall" id="checkall0" value="0" onclick="document.getElementById(\'form_userselect\').submit()" />'; echo '<label for="checkall0">' . $l['w_uncheck_all'] . '</label>'; echo '</span>' . K_NEWLINE; echo '<br />' . K_NEWLINE; echo '<strong style="margin:5px">' . $l['m_with_selected'] . '</strong>' . K_NEWLINE; echo '<ul style="margin:0">'; if ($_SESSION['session_user_level'] >= K_AUTH_DELETE_USERS) { // delete user echo '<li>'; F_submit_button('delete', $l['w_delete'], $l['h_delete']); echo '</li>' . K_NEWLINE; } if ($_SESSION['session_user_level'] >= K_AUTH_ADMIN_GROUPS) { echo '<li>'; // add/delete group echo F_user_group_select('new_group_id'); F_submit_button('addgroup', $l['w_add'], $l['w_add']); if ($_SESSION['session_user_level'] >= K_AUTH_DELETE_GROUPS) { F_submit_button('delgroup', $l['w_delete'], $l['h_delete']); } echo '</li>' . K_NEWLINE; if ($_SESSION['session_user_level'] >= K_AUTH_MOVE_GROUPS) { // move group echo '<li>'; if ($l['a_meta_dir'] == 'rtl') { $arr = '←'; } else { $arr = '→'; } echo F_user_group_select('from_group_id'); echo $arr; echo F_user_group_select('to_group_id'); F_submit_button('move', $l['w_move'], $l['w_move']); echo '</li>' . K_NEWLINE; } } echo '</ul>' . 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_USERS . '' . $wherequery . ''; if (!empty($order_field)) { $param_array = '&order_field=' . urlencode($order_field) . ''; } if (!empty($orderdir)) { $param_array .= '&orderdir=' . $orderdir . ''; } if (!empty($group_id)) { $param_array .= '&group_id=' . $group_id . ''; } 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 class="row">' . K_NEWLINE; echo '<br />'; //echo '<a href="tce_xml_users.php" class="xmlbutton" title="'.$l['h_xml_export'].'">XML</a> '; //echo '<a href="tce_csv_users.php" class="xmlbutton" title="'.$l['h_csv_export'].'">CSV</a>'; echo '</div>' . K_NEWLINE; echo '<div class="pagehelp">' . $l['hp_select_users'] . '</div>' . K_NEWLINE; echo '</div>' . K_NEWLINE; } else { F_print_error('MESSAGE', $l['m_search_void']); } } else { F_display_db_error(); } return TRUE; }
/** * Returns test stats as HTML table * @param $data (array) Array containing test statistics. * @param $nextorderdir (int) next order direction. * @param $order_field (string) order fields. * @param $filter (string) filter string for URLs. * @param $pubmode (boolean) If true filter the results for the public interface. * @param $stats (int) 2 = full stats; 1 = user stats; 0 = disabled stats; * return HTML table string. */ function F_printTestResultStat($data, $nextorderdir, $order_field, $filter, $pubmode = false, $stats = 1) { require_once '../config/tce_config.php'; global $db, $l; if (empty($data['num_records'])) { return; } if ($l['a_meta_dir'] == 'rtl') { $tdalignr = 'left'; $tdalign = 'right'; } else { $tdalignr = 'right'; $tdalign = 'left'; } $ret = ''; $ret .= '<table class="userselect">' . K_NEWLINE; $ret .= '<tr>' . K_NEWLINE; $ret .= '<th> </th>' . K_NEWLINE; $ret .= '<th>#</th>' . K_NEWLINE; $ret .= F_select_table_header_element('testuser_creation_time', $nextorderdir, $l['h_time_begin'], $l['w_time_begin'], $order_field, $filter); //$ret .= F_select_table_header_element('testuser_end_time', $nextorderdir, $l['h_time_end'], $l['w_time_end'], $order_field, $filter); $ret .= '<th title="' . $l['h_test_time'] . '">' . $l['w_time'] . '</th>' . K_NEWLINE; $ret .= F_select_table_header_element('testuser_test_id', $nextorderdir, $l['h_test'], $l['w_test'], $order_field, $filter); if (!$pubmode) { $ret .= F_select_table_header_element('user_name', $nextorderdir, $l['h_login_name'], $l['w_user'], $order_field, $filter); $ret .= F_select_table_header_element('user_lastname', $nextorderdir, $l['h_lastname'], $l['w_lastname'], $order_field, $filter); $ret .= F_select_table_header_element('user_firstname', $nextorderdir, $l['h_firstname'], $l['w_firstname'], $order_field, $filter); } $ret .= F_select_table_header_element('total_score', $nextorderdir, $l['h_score_total'], $l['w_score'], $order_field, $filter); if ($stats > 0) { $ret .= '<th title="' . $l['h_answers_right'] . '">' . $l['w_answers_right'] . '</th>' . K_NEWLINE; $ret .= '<th title="' . $l['h_answers_wrong'] . '">' . $l['w_answers_wrong'] . '</th>' . K_NEWLINE; $ret .= '<th title="' . $l['h_questions_unanswered'] . '">' . $l['w_questions_unanswered'] . '</th>' . K_NEWLINE; $ret .= '<th title="' . $l['h_questions_undisplayed'] . '">' . $l['w_questions_undisplayed'] . '</th>' . K_NEWLINE; $ret .= '<th title="' . $l['h_questions_unrated'] . '">' . $l['w_questions_unrated'] . '</th>' . K_NEWLINE; } $ret .= '<th title="' . $l['w_status'] . ' (' . $l['w_time'] . ' [' . $l['w_minutes'] . '])">' . $l['w_status'] . ' (' . $l['w_time'] . ' [' . $l['w_minutes'] . '])</th>' . K_NEWLINE; $ret .= '<th title="' . $l['h_testcomment'] . '">' . $l['w_comment'] . '</th>' . K_NEWLINE; $ret .= '</tr>' . K_NEWLINE; foreach ($data['testuser'] as $tu) { $ret .= '<tr>'; $ret .= '<td>'; $ret .= '<input type="checkbox" name="testuserid' . $tu['num'] . '" id="testuserid' . $tu['num'] . '" value="' . $tu['id'] . '" title="' . $l['w_select'] . '"'; if (isset($_REQUEST['checkall']) and $_REQUEST['checkall'] == 1) { $ret .= ' checked="checked"'; } $ret .= ' />'; $ret .= '</td>' . K_NEWLINE; if (!$pubmode or F_getBoolean($tu['test']['test_report_to_users'])) { $ret .= '<td><a href="tce_show_result_user.php?testuser_id=' . $tu['id'] . '&test_id=' . $tu['test']['test_id'] . '&user_id=' . $tu['user_id'] . '" title="' . $l['h_view_details'] . '">' . $tu['num'] . '</a></td>' . K_NEWLINE; } else { $ret .= '<td>' . $tu['num'] . '</td>' . K_NEWLINE; } $ret .= '<td style="text-align:center;">' . $tu['testuser_creation_time'] . '</td>' . K_NEWLINE; //$ret .= '<td style="text-align:center;">'.$tu['testuser_end_time'].'</td>'.K_NEWLINE; $ret .= '<td style="text-align:center;">' . $tu['time_diff'] . '</td>' . K_NEWLINE; $passmsg = ''; if ($tu['passmsg'] === true) { $passmsg = ' title="' . $l['w_passed'] . '" style="background-color:#BBFFBB;"'; } elseif ($tu['passmsg'] === false) { $passmsg = ' title="' . $l['w_not_passed'] . '" style="background-color:#FFBBBB;"'; } if ($pubmode) { $ret .= '<td style="text-align:' . $tdalign . ';">' . $tu['test']['test_name'] . '</td>' . K_NEWLINE; } else { $ret .= '<td style="text-align:' . $tdalign . ';"><a href="tce_edit_test.php?test_id=' . $tu['test']['test_id'] . '">' . $tu['test']['test_name'] . '</a></td>' . K_NEWLINE; $ret .= '<td style="text-align:' . $tdalign . ';"><a href="tce_edit_user.php?user_id=' . $tu['user_id'] . '">' . $tu['user_name'] . '</a></td>' . K_NEWLINE; $ret .= '<td style="text-align:' . $tdalign . ';"> ' . $tu['user_lastname'] . '</td>' . K_NEWLINE; $ret .= '<td style="text-align:' . $tdalign . ';"> ' . $tu['user_firstname'] . '</td>' . K_NEWLINE; } $ret .= '<td' . $passmsg . ' class="numeric">' . F_formatFloat($tu['total_score']) . ' ' . F_formatPercentage($tu['total_score_perc'], false) . '</td>' . K_NEWLINE; if ($stats > 0) { $ret .= '<td class="numeric">' . $tu['right'] . ' ' . F_formatPercentage($tu['right_perc'], false) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . $tu['wrong'] . ' ' . F_formatPercentage($tu['wrong_perc'], false) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . $tu['unanswered'] . ' ' . F_formatPercentage($tu['unanswered_perc'], false) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . $tu['undisplayed'] . ' ' . F_formatPercentage($tu['undisplayed_perc'], false) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . $tu['unrated'] . ' ' . F_formatPercentage($tu['unrated_perc'], false) . '</td>' . K_NEWLINE; } if ($tu['locked']) { $ret .= '<td style="background-color:#FFBBBB;">' . $l['w_locked']; } else { $ret .= '<td style="background-color:#BBFFBB;">' . $l['w_unlocked']; } if ($tu['remaining_time'] < 0) { $ret .= ' (' . $tu['remaining_time'] . ')'; } $ret .= '</td>' . K_NEWLINE; if (!empty($tu['user_comment'])) { $ret .= '<td title="' . substr(F_compact_string(htmlspecialchars($tu['user_comment'], ENT_NOQUOTES, $l['a_meta_charset'])), 0, 255) . '">' . $l['w_yes'] . '</td>' . K_NEWLINE; } else { $ret .= '<td> </td>' . K_NEWLINE; } $ret .= '</tr>' . K_NEWLINE; } $ret .= '<tr>'; $colspan = 16; if ($pubmode) { $colspan -= 3; } if ($stats == 0) { $colspan -= 5; } $ret .= '<td colspan="' . $colspan . '" style="text-align:' . $tdalign . ';font-weight:bold;padding-right:10px;padding-left:10px;'; if ($data['passed_perc'] > 50) { $ret .= ' background-color:#BBFFBB;"'; } else { $ret .= ' background-color:#FFBBBB;"'; } $ret .= '>' . $l['w_passed'] . ': ' . $data['passed'] . ' ' . F_formatPercentage($data['passed_perc'], false) . '</td>' . K_NEWLINE; $ret .= '</tr>'; // print statistics $printstat = array('mean', 'median', 'mode', 'standard_deviation', 'skewness', 'kurtosi'); $noperc = array('skewness', 'kurtosi'); foreach ($data['statistics'] as $row => $col) { if (in_array($row, $printstat)) { $ret .= '<tr>'; $scolspan = 8; if ($pubmode) { $scolspan -= 3; } $ret .= '<th colspan="' . $scolspan . '" style="text-align:' . $tdalignr . ';">' . $l['w_' . $row] . '</th>' . K_NEWLINE; if (in_array($row, $noperc)) { $ret .= '<td class="numeric">' . F_formatFloat($col['score_perc']) . '</td>' . K_NEWLINE; if ($stats > 0) { $ret .= '<td class="numeric">' . F_formatFloat($col['right_perc']) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . F_formatFloat($col['wrong_perc']) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . F_formatFloat($col['unanswered_perc']) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . F_formatFloat($col['undisplayed_perc']) . '</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . F_formatFloat($col['unrated_perc']) . '</td>' . K_NEWLINE; } } else { $ret .= '<td class="numeric">' . round($col['score_perc']) . '%</td>' . K_NEWLINE; if ($stats > 0) { $ret .= '<td class="numeric">' . round($col['right_perc']) . '%</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . round($col['wrong_perc']) . '%</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . round($col['unanswered_perc']) . '%</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . round($col['undisplayed_perc']) . '%</td>' . K_NEWLINE; $ret .= '<td class="numeric">' . round($col['unrated_perc']) . '%</td>' . K_NEWLINE; } } $ret .= '<td colspan="2"> </td>' . K_NEWLINE; $ret .= '</tr>'; } } $ret .= '</table>' . K_NEWLINE; return $ret; }
/** * Display user selection XHTML table (popup mode). * @author Nicola Asuni * @since 2012-04-14 * @param $order_field (string) Order by column name. * @param $orderdir (int) Order direction. * @param $firstrow (int) Number of first row to display. * @param $rowsperpage (int) Number of rows per page. * @param $andwhere (string) Additional SQL WHERE query conditions. * @param $searchterms (string) Search terms. * @param string $cid ID of the calling form field. * @return false in case of empty database, true otherwise */ function F_show_select_test_popup($order_field, $orderdir, $firstrow, $rowsperpage, $andwhere = '', $searchterms = '', $cid = 0) { global $l, $db; require_once '../config/tce_config.php'; require_once '../../shared/code/tce_functions_page.php'; require_once '../../shared/code/tce_functions_form.php'; $filter = 'cid=' . $cid; if ($l['a_meta_dir'] == 'rtl') { $txtalign = 'right'; $numalign = 'left'; } else { $txtalign = 'left'; $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; }
} else { F_display_db_error(); } echo '</select>' . K_NEWLINE; echo '</span>' . K_NEWLINE; echo '</div>' . K_NEWLINE; echo getFormNoscriptSelect('selectrecord'); echo '<div class="row"><hr /></div>' . K_NEWLINE; echo '<div class="rowl">' . K_NEWLINE; echo '<table class="userselect">' . K_NEWLINE; echo '<tr>' . K_NEWLINE; echo '<th>#</th>' . K_NEWLINE; echo '<th>#</th>' . K_NEWLINE; echo F_select_table_header_element('recurrence', $nextorderdir, $l['h_question_recurrence'], $l['w_recurrence'], $order_field, $filter); echo F_select_table_header_element('average_score', $nextorderdir, $l['h_score_average'], $l['w_score'], $order_field, $filter); echo F_select_table_header_element('average_time', $nextorderdir, $l['h_answer_time'], $l['w_answer_time'], $order_field, $filter); echo '<th title="' . $l['h_answers_right'] . '">' . $l['w_answers_right'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_answers_wrong'] . '">' . $l['w_answers_wrong'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_questions_unanswered'] . '">' . $l['w_questions_unanswered'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_questions_undisplayed'] . '">' . $l['w_questions_undisplayed'] . '</th>' . K_NEWLINE; echo '<th title="' . $l['h_questions_unrated'] . '">' . $l['w_questions_unrated'] . '</th>' . K_NEWLINE; echo '</tr>' . 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,