1 |
vitalif |
8 |
<?php |
2 |
|
|
|
3 |
|
|
// Функции вывода информации о пользователях, их результатах, etc... |
4 |
|
|
// Copyright (c) 2006, Виталий Филиппов [VMX] |
5 |
|
|
|
6 |
|
|
require_once 'config.php'; |
7 |
|
|
|
8 |
|
|
// Функция вывода информации о пользователях |
9 |
|
|
// $where_def :: WHERE-определение тех пользователей, информацию о ком надо выводить (по умолчанию "1", то есть все) |
10 |
|
|
// $cmdtail :: "хвост" команды для вызова скриптов в URL (по умолчанию - пустая строка) |
11 |
|
|
// $print_version :: выдать версию для печати и сделать exit? (по умолчанию - нет) |
12 |
|
|
// $users_table :: таблица с инфой о пользователях (по умолчанию $UsersTable из config.php) |
13 |
|
|
// $results_table :: таблица с инфой о результатах пользователей (по умолчанию $ResultsTable из config.php) |
14 |
|
|
// $additional_where :: дополнительное WHERE-определение в формате "AND ля-ля-ля..." для ввода дополнительных ограничений - действует и на таблицу с пользователями, и на таблицу с результатами |
15 |
|
|
// $command_list :: выводить список команд в версии "не-для-печати" |
16 |
|
|
function print_users_info ($where_def = '1', $cmdtail = '', $print_version = false, $users_table = false, $results_table = false, $additional_where = '', $command_list = true) |
17 |
|
|
{ |
18 |
|
|
global $result, $req_cmd, $req_cfail, $UsersTable, $ResultsTable; |
19 |
|
|
if ($users_table === false) $users_table = $UsersTable; |
20 |
|
|
if ($results_table === false) $results_table = $ResultsTable; |
21 |
|
|
$result = amysql_query ("SELECT * FROM `$users_table` WHERE $where_def $additional_where ORDER BY `lastname`, `firstname`, `thirdname`"); |
22 |
|
|
if ($result && ($row = mysql_fetch_assoc ($result))) |
23 |
|
|
{ |
24 |
|
|
echo '<table style="border-color: black; border-width: 1 1 0 1; border-style: solid" width="100%" align="center" cellspacing="0" class="frmLoginText"> |
25 |
|
|
<tr bgcolor="#FFE0FF"> |
26 |
|
|
<td style="border-width: 0 0 1 0; border-style: solid" align="center">№</td> |
27 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">Логин</td> |
28 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">+Тестов</td> |
29 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">ФИО</td> |
30 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">Город</td> |
31 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">Организация</td> |
32 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">Должность</td> |
33 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">E-mail</td> |
34 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">Телефон</td> |
35 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center" width="10%">Опыт работы с ViPNet</td> |
36 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">Зарегистрирован</td> |
37 |
|
|
<td style="border-width: 0 0 1 1; border-style: solid" align="center">Результат</td> |
38 |
|
|
</tr> |
39 |
|
|
<script language="JavaScript"> |
40 |
|
|
<!-- |
41 |
|
|
function setlogin (newlogin) |
42 |
|
|
{ |
43 |
|
|
searchusers.searchlogin.value=newlogin; |
44 |
|
|
searchusers.searchlogin.focus(); |
45 |
|
|
} |
46 |
|
|
--> |
47 |
|
|
</script>'; |
48 |
|
|
$usi = 1; |
49 |
|
|
do |
50 |
|
|
{ |
51 |
|
|
$result2 = amysql_query ("SELECT `result`, CHAR_LENGTH(`answers`) FROM `$results_table` WHERE `uid`=${row['id']} $additional_where ORDER BY -`date`,-`time` LIMIT 1"); |
52 |
|
|
$row2 = false; if ($result2) $row2 = mysql_fetch_row ($result2); |
53 |
|
|
echo "<tr> |
54 |
|
|
<td style=\"border-width: 0 0 1 0; border-style: solid\" align=\"center\">$usi</td> |
55 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">" . (!$print_version ? "<a href=\"javascript:void setlogin ('${row['login']}');\">" : '') . "${row['login']}" . (!$print_version ? "</a>" : '') . "</td> |
56 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['testlimit']}</td> |
57 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['lastname']} ${row['firstname']} ${row['thirdname']}</td> |
58 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['town']}</td> |
59 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['firm']}</td> |
60 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['position']}</td> |
61 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['email']}</td> |
62 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['phone']}</td> |
63 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['vipnet']}</td> |
64 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">${row['date']}<br>${row['time']}</td> |
65 |
|
|
<td style=\"border-width: 0 0 1 1; border-style: solid\" align=\"center\">" . ($row2 !== false ? floor(100*$row2[0]/$row2[1]) . '%<br>(' . $row2[0] . '/' . $row2[1] . ')' : '') . (!$print_version ? " <a href=\"?cmd=results&uid=${row['id']}&$cmdtail\">...</a>" : '') . " </td> |
66 |
|
|
</tr>"; |
67 |
|
|
$usi++; |
68 |
|
|
} while ($row = mysql_fetch_assoc ($result)); |
69 |
|
|
echo '</table>'; |
70 |
|
|
if (!$print_version && $command_list) |
71 |
|
|
echo '<table class="frmLoginText" style="border-color: black; border-width: 0 1 1 1; border-style: solid" bgcolor="#E0E0FF" align="center" cellspacing="0">' . |
72 |
|
|
'<tr><td><input type="button" class="frmLoginButton" value="Дать +1 тест" onClick="navigate(\'?cmd=plustest&' . $cmdtail . '\');"></td><td></td>' . |
73 |
|
|
'<td><input type="button" class="frmLoginButton" value="Отнять 1 тест" onClick="navigate(\'?cmd=minustest&' . $cmdtail . '\');"></td><td></td>' . |
74 |
|
|
'<td><input type="button" class="frmLoginButton" value="Убрать тесты" onClick="if (confirm(\'Действительно отнять у выбранных пользователей возможность проходить тесты (до разрешения)?\')) navigate(\'?cmd=cleartest&' . $cmdtail . '\');"></td><td></td>' . |
75 |
|
|
'<td><input type="button" class="frmLoginButton" value="Версия для печати" onClick="navigate(\'?cmd=prnusers&' . $cmdtail . '\');"></td><td></td>' . |
76 |
|
|
'<td><input type="button" class="frmLoginButton" value="Тесты подробно" onClick="navigate(\'?cmd=prntests&' . $cmdtail . '\');"></td><td></td></tr>' . |
77 |
|
|
'</table><br>'; |
78 |
|
|
else if ($print_version) |
79 |
|
|
{ |
80 |
|
|
echo '<p class="frmLoginText" style="margin: 2 0 16 0" align="center"><a href="?cmd=users&' . $cmdtail . '">Назад</a></p></body></html>'; |
81 |
|
|
exit; |
82 |
|
|
} |
83 |
|
|
} |
84 |
|
|
else |
85 |
|
|
{ |
86 |
|
|
if (!$result) |
87 |
|
|
$req_cfail = 10; |
88 |
|
|
else |
89 |
|
|
{ |
90 |
|
|
echo '<table style="border-color: black; border-width: 1 1 1 1; border-style: solid" width="700" align="center" cellspacing="0" bgcolor="#FFD0D0" class="frmLoginText">'; |
91 |
|
|
echo '<tr><td align="center"><b>Некого показать!</b></td></tr>'; |
92 |
|
|
echo '</table><br>'; |
93 |
|
|
} |
94 |
|
|
} |
95 |
|
|
} |
96 |
|
|
|
97 |
|
|
// Функция вывода информации о пользователе и всех его результатов кратко |
98 |
|
|
// $userid :: ID пользователя (по умолчанию 1) |
99 |
|
|
// $print_version :: выдать версию для печати? (по умолчанию - нет) |
100 |
|
|
// $users_table :: таблица с инфой о пользователях (по умолчанию $UsersTable из config.php) |
101 |
|
|
// $results_table :: таблица с инфой о результатах пользователей (по умолчанию $ResultsTable из config.php) |
102 |
|
|
// $additional_where :: дополнительное WHERE-определение в формате "AND ля-ля-ля..." для ввода дополнительных ограничений - действует и на таблицу с пользователями, и на таблицу с результатами |
103 |
|
|
function print_results_info ($userid = 1, $print_version = false, $users_table = false, $results_table = false, $additional_where = '') |
104 |
|
|
{ |
105 |
|
|
global $UsersTable, $ResultsTable; |
106 |
|
|
if ($users_table === false) $users_table = $UsersTable; |
107 |
|
|
if ($results_table === false) $results_table = $ResultsTable; |
108 |
|
|
// Выдаём таблицу результатов ... |
109 |
|
|
$result = amysql_query ("SELECT * FROM `$users_table` WHERE `id`=$userid $additional_where LIMIT 1"); |
110 |
|
|
$row = mysql_fetch_assoc ($result); |
111 |
|
|
echo "<table width=\"700\" bgcolor=\"#E0E0FF\" cellspacing=\"0\" style=\"border-color: black; border-width: 1 1 0 1; border-style: solid\" align=\"center\" class=\"frmLoginText\">" |
112 |
|
|
. "<tr><td bgcolor=\"#F0F0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">ФИО</p></td><td bgcolor=\"#F0F0FF\"><p style=\"margin: 2 2 0 2\">${row['lastname']} ${row['firstname']} ${row['thirdname']}</p></td></tr>" |
113 |
|
|
. "<tr><td bgcolor=\"#E0E0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">Город</p></td><td><p style=\"margin: 2 2 0 2\">${row['town']}</p></td></tr>" |
114 |
|
|
. "<tr><td bgcolor=\"#F0F0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">Организация</p></td><td bgcolor=\"#F0F0FF\"><p style=\"margin: 2 2 0 2\">${row['firm']}</p></td></tr>" |
115 |
|
|
. "<tr><td bgcolor=\"#E0E0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">Должность</p></td><td><p style=\"margin: 2 2 0 2\">${row['position']}</p></td></tr>" |
116 |
|
|
. "<tr><td bgcolor=\"#F0F0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">E-mail</p></td><td bgcolor=\"#F0F0FF\"><p style=\"margin: 2 2 0 2\">${row['email']}</p></td></tr>" |
117 |
|
|
. "<tr><td bgcolor=\"#E0E0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">Телефон</p></td><td><p style=\"margin: 2 2 0 2\">${row['phone']}</p></td></tr>" |
118 |
|
|
. "<tr><td bgcolor=\"#F0F0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">Опыт работы с ViPNet</p></td><td bgcolor=\"#F0F0FF\"><p style=\"margin: 2 2 0 2\">${row['vipnet']}</p></td></tr>" |
119 |
|
|
. "<tr><td bgcolor=\"#E0E0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">Зарегистрирован</p></td><td><p style=\"margin: 2 2 0 2\">${row['date']} ${row['time']}</p></td></tr>" |
120 |
|
|
. "<tr><td bgcolor=\"#F0F0FF\" style=\"border-width: 0 0 0 0; border-style: solid\"><p style=\"margin: 2 2 0 2\">Логин</p></td><td bgcolor=\"#F0F0FF\"><p style=\"margin: 2 2 0 2\">${row['login']}</p></td></tr>"; |
121 |
|
|
$result = amysql_query ("SELECT CHAR_LENGTH(`answers`), `date`, `time`, `result`, `answers`, `varid` FROM `$results_table` WHERE `uid`=$userid $additional_where ORDER BY -`date`, -`time`"); |
122 |
|
|
$row2 = mysql_fetch_assoc ($result); |
123 |
|
|
$lastrow_d = 0; |
124 |
|
|
if ($result || !$row2) |
125 |
|
|
$lastrow_d = 1; |
126 |
|
|
echo "<tr><td bgcolor=\"#E0E0FF\" style=\"border-width: 0 0 $lastrow_d 0; border-style: solid\"><p style=\"margin: 2 2 2 2\">Осталось тестов</p></td><td style=\"border-width: 0 0 $lastrow_d 0; border-style: solid\"><p style=\"margin: 2 2 2 2\">${row['testlimit']}</p></td></tr></table><br>"; |
127 |
|
|
$row = $row2; |
128 |
|
|
if ($result && $row) |
129 |
|
|
{ |
130 |
|
|
echo '<table class="frmLoginText" cellspacing="0" style="border-color: black; border-width: 1; border-style: solid" align="center" width="700" bgcolor="#F0F0FF">'; |
131 |
|
|
echo '<tr><td bgcolor="#E0E0FF" width="25%" style="border-width: 0 1 1 0; border-style: solid" align="center">Вариант теста</td><td width="25%" bgcolor="#E0E0FF" style="border-width: 0 1 1 0; border-style: solid" align="center">Время</td><td width="25%" bgcolor="#E0E0FF" style="border-width: 0 1 1 0; border-style: solid" align="center">Дата</td><td width="25%" bgcolor="#E0E0FF" style="border-width: 0 0 1 0; border-style: solid" align="center">Результат</td></tr>'; |
132 |
|
|
do |
133 |
|
|
{ |
134 |
|
|
$crcnt = 1 + $row['CHAR_LENGTH(`answers`)'] - 1; |
135 |
|
|
$crres = 1 + $row['result'] - 1; |
136 |
|
|
$crper = 100 * $crres / $crcnt; |
137 |
|
|
echo "<tr><td align=\"center\">${row['varid']}</td><td align=\"center\">${row['time']}</td><td align=\"center\">${row['date']}</td><td align=\"center\">$crper% ($crres / $crcnt)</td></tr>"; |
138 |
|
|
} while ($row = mysql_fetch_assoc ($result)); |
139 |
|
|
echo '</table>'; |
140 |
|
|
} |
141 |
|
|
echo '<br>'; |
142 |
|
|
} |
143 |
|
|
|
144 |
|
|
// Функция вывода всех результатов пользователей детально и exit'а после этого |
145 |
|
|
// $where_def :: WHERE-определение тех пользователей, информацию о ком надо выводить. where_def должно быть относительно таблицы t1, то есть WHERE-определение вида "t1.id=1" а не "`id`=1" (по умолчанию "1", то есть все) |
146 |
|
|
// $cmdtail :: "хвост" команды для вызова скриптов в URL (по умолчанию - пустая строка) |
147 |
|
|
// $users_table :: таблица с инфой о пользователях (по умолчанию $UsersTable из config.php) |
148 |
|
|
// $results_table :: таблица с инфой о результатах пользователей (по умолчанию $ResultsTable из config.php) |
149 |
|
|
// $questions_table :: таблица с вопросами (по умолчанию $QuestionsTable из config.php) |
150 |
|
|
// $additional_where :: здесь возможности ограничены :) это дополнительные ограничения только в виде "ПОЛЕ=ЗНАЧЕНИЕ", т.к в начало к нему приписывается имя таблицы. Действуют и на таблицу с пользователями, и на таблицу с результатами, и с вопросами. |
151 |
|
|
function print_tests_detailed_info ($where_def = '1', $cmdtail = '', $users_table = false, $results_table = false, $questions_table = false, $additional_where = false) |
152 |
|
|
{ |
153 |
|
|
global $UsersTable, $ResultsTable, $QuestionsTable, $req_showall, $req_nohide; |
154 |
|
|
if ($users_table === false) $users_table = $UsersTable; |
155 |
|
|
if ($results_table === false) $results_table = $ResultsTable; |
156 |
|
|
if ($questions_table === false) $questions_table = $QuestionsTable; |
157 |
|
|
if ($additional_where !== false) $addwh = "AND t1.$additional_where AND t2.$additional_where"; else $addwh = ''; |
158 |
|
|
$result = amysql_query ("SELECT t1.lastname, t1.firstname, t1.thirdname, t2.* FROM `$users_table` AS t1, `$results_table` AS t2 WHERE $where_def $addwh AND t2.uid=t1.id ORDER BY t1.lastname, t1.firstname, t1.thirdname, -t2.date, -t2.time"); |
159 |
|
|
if ($row = mysql_fetch_assoc ($result)) |
160 |
|
|
{ |
161 |
|
|
echo '<table width="900" bgcolor="#FFF0E0" cellspacing="0" style="border-color: black; border-width: 1 1 1 1; border-style: solid" align="center" class="frmLoginText">'; |
162 |
|
|
$msg = 'Показаны неверные ответы выбранных пользователей'; |
163 |
|
|
if (!isset ($req_nohide)) |
164 |
|
|
$msg .= ' <a href="?cmd=prntests&' . $cmdtail . '&nohide">(показать неотвеченные...)</a>'; |
165 |
|
|
else $msg = 'Показаны неверные и неотвеченные ответы выбранных пользователей <a href="?cmd=prntests&' . $cmdtail . '">(убрать неотвеченные...)</a>'; |
166 |
|
|
if (!isset ($req_showall)) |
167 |
|
|
$msg .= ' <a href="?cmd=prntests&' . $cmdtail . '&nohide&showall">(показать все...)</a>'; |
168 |
|
|
else |
169 |
|
|
{ |
170 |
|
|
if (isset ($req_nohide)) |
171 |
|
|
$msg = 'Показаны <i>все</i> ответы выбранных пользователей <a href="?cmd=prntests&' . $cmdtail . '&nohide">(убрать правильные...)</a> <a href="?cmd=prntests&' . $cmdtail . '">(убрать и неотвеченные...)</a>'; |
172 |
|
|
else $msg = 'Показаны ответы выбранных пользователей'; |
173 |
|
|
} |
174 |
|
|
echo '<tr><td colspan="2" bgcolor="#E0E0FF" align="center"><b>' . $msg . '</b></td></tr>'; |
175 |
|
|
$notfirst = 0; |
176 |
|
|
while ($row) |
177 |
|
|
{ |
178 |
|
|
echo '<tr><td bgcolor="#E0E0FF" style="border-width: 1 0 1 0; border-style: solid; border-color: black"><b>' . $row['lastname'] . ' ' . $row ['firstname'] . ' ' . $row ['thirdname'] . ': ' . floor (100 * $row['result'] / strlen ($row ['answers'])) . '%</b></td><td width="150" align="right" bgcolor="#E0E0FF" style="border-width: 1 0 1 0; border-style: solid; border-color: black"><b>' . $row ['date'] . ' ' . $row ['time'] . '</b></td></tr>'; |
179 |
|
|
if ($additional_where !== false) $addwh = 'AND ' . $additional_where; else $addwh = ''; |
180 |
|
|
$res2 = amysql_query ("SELECT * FROM `$questions_table` WHERE `varid`=${row['varid']} $addwh ORDER BY `id`"); |
181 |
|
|
$quests = array (); |
182 |
|
|
while ($row2 = mysql_fetch_assoc ($res2)) |
183 |
|
|
{ |
184 |
|
|
$quests [$row2['id']] = $row2; |
185 |
|
|
$quests [$row2['id']]['answer0'] = 'не отвечено'; |
186 |
|
|
} |
187 |
|
|
$allanswers = true; |
188 |
|
|
$noshown = true; |
189 |
|
|
$i = 0; |
190 |
|
|
foreach ($quests as $cq) |
191 |
|
|
{ |
192 |
|
|
$outtr = false; |
193 |
|
|
if (strlen ($row ['answers']) > $i) |
194 |
|
|
{ |
195 |
|
|
if ($row['answers']{$i} != $cq['rightanswer']) |
196 |
|
|
{ |
197 |
|
|
$allanswers = false; |
198 |
|
|
if ($row['answers']{$i} != 0) |
199 |
|
|
$outtr = ' => <font color=red>' . $cq ['answer' . $row['answers']{$i}] . '</font>'; |
200 |
|
|
else if (isset ($req_nohide)) |
201 |
|
|
$outtr = ' => <font color="#008000">' . $cq ['answer' . $row['answers']{$i}] . '</font>'; |
202 |
|
|
} |
203 |
|
|
else if (isset ($req_showall)) |
204 |
|
|
$outtr = ' => <font color=blue>' . $cq ['answer' . $row['answers']{$i}] . '</font>'; |
205 |
|
|
} |
206 |
|
|
if ($outtr !== false) |
207 |
|
|
{ |
208 |
|
|
echo '<tr><td colspan="2">' . $cq ['num'] . '. ' . $cq ['question'] . $outtr . '</td></tr>'; |
209 |
|
|
$noshown = false; |
210 |
|
|
} |
211 |
|
|
$i++; |
212 |
|
|
} |
213 |
|
|
if ($allanswers) |
214 |
|
|
echo '<tr><td colspan="2">Пользователь ответил на <b>все</b> вопросы правильно! Молодец :)</td></tr>'; |
215 |
|
|
else if ($noshown) |
216 |
|
|
echo '<tr><td colspan="2">Нечего показать :(</td></tr>'; |
217 |
|
|
$row = mysql_fetch_assoc ($result); |
218 |
|
|
$notfirst = 1; |
219 |
|
|
} |
220 |
|
|
echo '</table>'; |
221 |
|
|
} |
222 |
|
|
echo '<p class="frmLoginText" align="center">Внимание: для корректного вывода информации текущие вопросы в БД должны соответствовать тем, на которые отвечали выбранные пользователи<br><a href="?cmd=users&' . $cmdtail . '">Назад</a></p></body></html>'; |
223 |
|
|
exit; |
224 |
|
|
} |
225 |
|
|
|
226 |
|
|
?> |