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 - (hide annotations) (download) (as text)
Sun Feb 17 15:07:41 2008 MSK (12 years, 11 months ago) by vitalif
File MIME type: text/x-php; charset=windows-1251
File size: 16620 byte(s)
Release 2.0

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>" : '') . "&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     ?>