4 * Display a list of all users currently logged on to the Citadel server.
12 * Display inner div of Wholist
14 void who_inner_div(void) {
15 char buf[SIZ], user[SIZ], room[SIZ], host[SIZ],
16 realroom[SIZ], realhost[SIZ];
22 wprintf("<table border=\"0\" cellspacing=\"0\" width=\"100%%\" bgcolor=\"#FFFFFF\">"
24 wprintf("<th colspan=\"3\"> </th>\n");
25 wprintf("<th>User Name</th>\n");
26 wprintf("<th>Room</th>");
27 wprintf("<th>From host</th>\n</tr>\n");
30 serv_getln(buf, sizeof buf);
32 now = extract_long(&buf[4], 0);
39 serv_getln(buf, sizeof buf);
41 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
42 sess = extract_int(buf, 0);
43 extract_token(user, buf, 1, '|', sizeof user);
44 extract_token(room, buf, 2, '|', sizeof room);
45 extract_token(host, buf, 3, '|', sizeof host);
46 extract_token(realroom, buf, 9, '|', sizeof realroom);
47 extract_token(realhost, buf, 10, '|', sizeof realhost);
48 last_activity = extract_long(buf, 5);
51 wprintf("<tr bgcolor=\"#%s\">",
52 (bg ? "DDDDDD" : "FFFFFF")
58 (sess != WC->ctdl_pid)) {
59 wprintf(" <a href=\"/terminate_session?which_session=%d", sess);
60 wprintf("\" onClick=\"return ConfirmKill();\" "
63 if (sess == WC->ctdl_pid) {
64 wprintf(" <a href=\"/edit_me\" "
69 /* (link to page this user) */
70 wprintf("<td><a href=\"/display_page?recp=");
73 "<img align=\"middle\" "
74 "src=\"/static/citadelchat_24x.gif\" "
76 " border=\"0\" /></a> ");
81 if ((now - last_activity) > 900L) {
83 "<img align=\"middle\" "
84 "src=\"/static/inactiveuser_24x.gif\" "
85 "alt=\"[idle]\" border=\"0\" />");
89 "<img align=\"middle\" "
90 "src=\"/static/activeuser_24x.gif\" "
91 "alt=\"[active]\" border=\"0\" />");
93 wprintf("</td>\n<td>");
97 /* username (link to user bio/photo page) */
98 wprintf("<a href=\"/showuser?who=");
105 wprintf("</td>\n\t<td>");
107 if (strlen(realroom) > 0) {
108 wprintf("<br /><i>");
112 wprintf("</td>\n\t<td>");
116 if (strlen(realhost) > 0) {
117 wprintf("<br /><i>");
121 wprintf("</td>\n</tr>");
129 * XML-encapsulated version of wholist inner html
131 void who_inner_html(void) {
132 output_headers(0, 0, 0, 0, 0, 0, 0);
134 wprintf("Content-type: text/xml;charset=UTF-8\r\n"
136 "Connection: close\r\n"
137 "Pragma: no-cache\r\n"
138 "Cache-Control: no-store\r\n",
142 wprintf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
143 "<ajax-response>\r\n"
144 "<response type=\"element\" id=\"fix_scrollbar_bug\">\r\n"
149 wprintf("</response>\r\n"
150 "</ajax-response>\r\n"
164 output_headers(1, 1, 2, 0, 1, 0, 0); old refresh30 version
166 output_headers(1, 1, 2, 0, 0, 0, 0);
168 wprintf("<script type=\"text/javascript\">\n"
169 "function ConfirmKill() { \n"
170 "return confirm('Do you really want to kill this session?');\n"
175 wprintf("<div id=\"banner\">\n");
176 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
177 wprintf("<IMG SRC=\"/static/usermanag_48x.gif\" ALT=\" \" "
180 /* "onLoad=\"javascript:bodyOnLoad()\" " */
181 wprintf("<SPAN CLASS=\"titlebar\"> Users currently on ");
182 escputs(serv_info.serv_humannode);
183 wprintf("</SPAN></TD><TD ALIGN=RIGHT>");
185 wprintf("</TD></TR></TABLE>\n");
188 wprintf("<div id=\"content\">\n");
190 wprintf("<div style=\"display:inline\" id=\"fix_scrollbar_bug\">");
191 who_inner_div(); /* Actual data handled by another function */
194 wprintf("<div id=\"instructions\" align=center>"
195 "Click on a name to read user info. Click on "
196 "<IMG ALIGN=MIDDLE SRC=\"/static/citadelchat_16x.gif\" "
197 "ALT=\"(p)\" BORDER=0>"
198 " to send an instant message to that user.</div>\n");
200 /* JavaScript to make the ajax refresh happen:
201 * 1. Register the request 'getWholist' which calls the WebCit action 'who_inner_html'
202 * 2. Register the 'fix_scrollbar_bug' div as one we're interested in ajaxifying
203 * 3. setInterval to make the ajax refresh happen every 30 seconds. The random number
204 * in the request is there to prevent IE from caching the XML even though it's been
205 * told not to. Die, Microsoft, Die.
209 " <script type=\"text/javascript\"> \n"
210 " ajaxEngine.registerRequest('getWholist', 'who_inner_html');\n"
211 " ajaxEngine.registerAjaxElement('fix_scrollbar_bug'); \n"
212 " setInterval(\"ajaxEngine.sendRequest('getWholist', 'junk='+Math.random());\", 30000); \n"
221 void terminate_session(void)
225 serv_printf("TERM %s", bstr("which_session"));
226 serv_getln(buf, sizeof buf);
232 * Change your session info (fake roomname and hostname)
238 if (!strcasecmp(bstr("sc"), "Change room name")) {
239 serv_printf("RCHG %s", bstr("fake_roomname"));
240 serv_getln(buf, sizeof buf);
241 http_redirect("/who");
242 } else if (!strcasecmp(bstr("sc"), "Change host name")) {
243 serv_printf("HCHG %s", bstr("fake_hostname"));
244 serv_getln(buf, sizeof buf);
245 http_redirect("/who");
246 } else if (!strcasecmp(bstr("sc"), "Change user name")) {
247 serv_printf("UCHG %s", bstr("fake_username"));
248 serv_getln(buf, sizeof buf);
249 http_redirect("/who");
250 } else if (!strcasecmp(bstr("sc"), "Cancel")) {
251 http_redirect("/who");
254 output_headers(1, 1, 0, 0, 0, 0, 0);
256 wprintf("<div id=\"banner\">\n");
257 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
258 wprintf("<SPAN CLASS=\"titlebar\">");
259 wprintf("Edit your session display");
260 wprintf("</SPAN></TD></TR></TABLE>\n");
261 wprintf("</div>\n<div id=\"content\">\n");
263 wprintf("This screen allows you to change the way your\n");
264 wprintf("session appears in the 'Who is online' listing.\n");
265 wprintf("To turn off any 'fake' name you've previously\n");
266 wprintf("set, simply click the appropriate 'change' button\n");
267 wprintf("without typing anything in the corresponding box.\n");
270 wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_me\">\n");
272 wprintf("<TABLE border=0 width=100%%>\n");
274 wprintf("<TR><TD><B>Room name:</B></TD>\n<TD>");
275 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_roomname\" MAXLENGTH=\"64\">\n");
276 wprintf("</TD>\n<TD ALIGN=center>");
277 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change room name\">");
278 wprintf("</TD>\n</TR>\n");
280 wprintf("<TR><TD><B>Host name:</B></TD><TD>");
281 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_hostname\" MAXLENGTH=\"64\">\n");
282 wprintf("</TD>\n<TD ALIGN=center>");
283 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change host name\">");
284 wprintf("</TD>\n</TR>\n");
287 wprintf("<TR><TD><B>User name:</B></TD><TD>");
288 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_username\" MAXLENGTH=\"64\">\n");
289 wprintf("</TD>\n<TD ALIGN=center>");
290 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change user name\">");
291 wprintf("</TD>\n</TR>\n");
293 wprintf("<TR><TD> </TD><TD> </TD><TD ALIGN=center>");
294 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
295 wprintf("</TD></TR></TABLE>\n");
296 wprintf("</FORM></CENTER>\n");