* All OS-level includes are now included from webcit.h instead of from
[citadel.git] / webcit / userlist.c
1 /*
2  * $Id$
3  *
4  * Display a list of all accounts on a Citadel system.
5  *
6  */
7
8 #include "webcit.h"
9
10 struct namelist {
11         struct namelist *next;
12         char name[32];
13 };
14
15 /*
16  * display the userlist
17  */
18 void userlist(void)
19 {
20         char buf[SIZ];
21         char fl[SIZ];
22         struct tm tmbuf;
23         time_t lc;
24         struct namelist *bio = NULL;
25         struct namelist *bptr;
26         int has_bio;
27         int bg = 0;
28
29         serv_puts("LBIO");
30         serv_getln(buf, sizeof buf);
31         if (buf[0] == '1')
32                 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
33                         bptr = (struct namelist *) malloc(sizeof(struct namelist));
34                         bptr->next = bio;
35                         strcpy(bptr->name, buf);
36                         bio = bptr;
37                 }
38         output_headers(1, 1, 2, 0, 0, 0, 0);
39         wprintf("<div id=\"banner\">\n"
40                 "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
41                 "<SPAN CLASS=\"titlebar\">User list for ");
42         escputs(serv_info.serv_humannode);
43         wprintf("</SPAN>"
44                 "</TD></TR></TABLE>\n"
45                 "</div>\n<div id=\"content\">\n"
46         );
47
48         serv_puts("LIST");
49         serv_getln(buf, sizeof buf);
50         if (buf[0] != '1') {
51                 wprintf("<EM>%s</EM><br />\n", &buf[4]);
52                 goto DONE;
53         }
54
55         wprintf("<div id=\"fix_scrollbar_bug\">"
56                 "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
57         wprintf("<TR><TH>User Name</TH><TH>Number</TH><TH>Access Level</TH>");
58         wprintf("<TH>Last Login</TH><TH>Total Logins</TH><TH>Total Posts</TH></TR>\n");
59
60         while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
61                 extract_token(fl, buf, 0, '|', sizeof fl);
62                 has_bio = 0;
63                 for (bptr = bio; bptr != NULL; bptr = bptr->next) {
64                         if (!strcasecmp(fl, bptr->name))
65                                 has_bio = 1;
66                 }
67                 bg = 1 - bg;
68                 wprintf("<TR BGCOLOR=\"#%s\"><TD>",
69                         (bg ? "DDDDDD" : "FFFFFF")
70                 );
71                 if (has_bio) {
72                         wprintf("<A HREF=\"/showuser&who=");
73                         urlescputs(fl);
74                         wprintf("\">");
75                         escputs(fl);
76                         wprintf("</A>");
77                 } else {
78                         escputs(fl);
79                 }
80                 wprintf("</TD><TD>%ld</TD><TD>%d</TD><TD>",
81                         extract_long(buf, 2),
82                         extract_int(buf, 1));
83                 lc = extract_long(buf, 3);
84                 localtime_r(&lc, &tmbuf);
85                 wprintf("%02d/%02d/%04d ",
86                         (tmbuf.tm_mon + 1),
87                         tmbuf.tm_mday,
88                         (tmbuf.tm_year + 1900));
89
90
91                 wprintf("</TD><TD>%ld</TD><TD>%5ld</TD></TR>\n",
92                         extract_long(buf, 4), extract_long(buf, 5));
93
94         }
95         wprintf("</table></div>\n");
96 DONE:   wDumpContent(1);
97 }
98
99
100 /*
101  * Display (non confidential) information about a particular user
102  */
103 void showuser(void)
104 {
105         char who[SIZ];
106         char buf[SIZ];
107         int have_pic;
108
109         strcpy(who, bstr("who"));
110
111         output_headers(1, 1, 2, 0, 0, 0, 0);
112         wprintf("<div id=\"banner\">\n"
113                 "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR>"
114                 "<TD><IMG SRC=\"/static/usermanag_48x.gif\"></TD>"
115                 "<td align=left><SPAN CLASS=\"titlebar\">User profile</SPAN>"
116                 "</TD></TR></TABLE>\n"
117                 "</div>\n<div id=\"content\">\n"
118         );
119
120         wprintf("<div id=\"fix_scrollbar_bug\">"
121                 "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
122
123         serv_printf("OIMG _userpic_|%s", who);
124         serv_getln(buf, sizeof buf);
125         if (buf[0] == '2') {
126                 have_pic = 1;
127                 serv_puts("CLOS");
128                 serv_getln(buf, sizeof buf);
129         } else {
130                 have_pic = 0;
131         }
132
133         wprintf("<CENTER><TABLE><TR><TD>");
134         if (have_pic == 1) {
135                 wprintf("<IMG SRC=\"/image&name=_userpic_&parm=");
136                 urlescputs(who);
137                 wprintf("\">");
138         }
139         wprintf("</TD><TD><H1>%s</H1></TD></TR></TABLE></CENTER>\n", who);
140         serv_printf("RBIO %s", who);
141         serv_getln(buf, sizeof buf);
142         if (buf[0] == '1') {
143                 fmout(NULL, "JUSTIFY");
144         }
145         wprintf("<br /><A HREF=\"/display_page?recp=");
146         urlescputs(who);
147         wprintf("\">"
148                 "<IMG SRC=\"/static/citadelchat_24x.gif\" "
149                 "ALIGN=MIDDLE BORDER=0>&nbsp;&nbsp;"
150                 "Click here to send an instant message to ");
151         escputs(who);
152         wprintf("</A>\n");
153
154         wprintf("</td></tr></table></div>\n");
155         wDumpContent(1);
156 }