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