subversion://[vpntest]/release/2.0/WWW/lib/info.php Log in
ViewVC logotype

Annotate of /release/2.0/WWW/lib/info.php

Parent Directory Parent Directory | Revision Log Revision Log

Revision 9 - (show annotations) (download) (as text)
Sun Feb 17 15:07:41 2008 MSK (12 years, 9 months ago) by vitalif
File MIME type: text/plain; charset=windows-1251
File size: 16620 byte(s)
Release 2.0

1 <?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>" : '') . "&nbsp;</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 ?>