* Moved to the new string tokenizer API
[citadel.git] / webcit / userlist.c
index abe0971ff79f4200e3f93ac14cc86ede7c79cee3..69a4c2e88b940dc5cc604773b8ecad1f781622d3 100644 (file)
+/*
+ * $Id$
+ *
+ * Display a list of all accounts on a Citadel system.
+ *
+ */
+
+#include <ctype.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
+#include <fcntl.h>
 #include <signal.h>
 #include <sys/types.h>
-#include <ctype.h>
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <limits.h>
+#include <netinet/in.h>
+#include <netdb.h>
 #include <string.h>
-#include <time.h>
+#include <pwd.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <pthread.h>
+#include <signal.h>
 #include "webcit.h"
-#include "child.h"
 
 struct namelist {
        struct namelist *next;
        char name[32];
-       };
+};
 
 /*
  * display the userlist
  */
-void userlist(void) { 
-       char buf[256];
-       char fl[256];
+void userlist(void)
+{
+       char buf[SIZ];
+       char fl[SIZ];
        struct tm *tmbuf;
        long lc;
        struct namelist *bio = NULL;
        struct namelist *bptr;
        int has_bio;
+       int bg = 0;
 
        serv_puts("LBIO");
        serv_gets(buf);
-       if (buf[0]=='1') while (serv_gets(buf), strcmp(buf,"000")) {
-               bptr = (struct namelist *) malloc(sizeof(struct namelist));
-               bptr->next = bio;
-               strcpy(bptr->name, buf);
-               bio = bptr;
+       if (buf[0] == '1')
+               while (serv_gets(buf), strcmp(buf, "000")) {
+                       bptr = (struct namelist *) malloc(sizeof(struct namelist));
+                       bptr->next = bio;
+                       strcpy(bptr->name, buf);
+                       bio = bptr;
                }
-
-
-        printf("HTTP/1.0 200 OK\n");
-        output_headers();
-        wprintf("<HTML><HEAD><TITLE>User list</TITLE>\n");
-        wprintf("</HEAD><BODY BACKGROUND=\"/image&name=background\" TEXT=\"#000000\" LINK=\"#004400\">\n");
+       output_headers(1, 1, 2, 0, 0, 0, 0);
+       wprintf("<div id=\"banner\">\n"
+               "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
+               "<SPAN CLASS=\"titlebar\">User list for ");
+       escputs(serv_info.serv_humannode);
+       wprintf("</SPAN>"
+               "</TD></TR></TABLE>\n"
+               "</div>\n<div id=\"content\">\n"
+       );
 
        serv_puts("LIST");
        serv_gets(buf);
-       if (buf[0]!='1') {
-               wprintf("<EM>%s</EM><BR>\n",&buf[4]);
+       if (buf[0] != '1') {
+               wprintf("<EM>%s</EM><br />\n", &buf[4]);
                goto DONE;
-               }
-
-
-        wprintf("<TABLE WIDTH=100% BORDER=0 BGCOLOR=007700><TR><TD>");
-        wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
-        wprintf("<B>User list for ");
-       escputs(serv_info.serv_humannode);
-        wprintf("</B></FONT></TD></TR></TABLE>\n");
+       }
 
-       wprintf("<CENTER><TABLE border>");
+       wprintf("<div id=\"fix_scrollbar_bug\">"
+               "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
        wprintf("<TR><TH>User Name</TH><TH>Number</TH><TH>Access Level</TH>");
-       wprintf("<TH>Last Call</TH><TH>Total Calls</TH><TH>Total Posts</TH></TR>\n");
+       wprintf("<TH>Last Login</TH><TH>Total Logins</TH><TH>Total Posts</TH></TR>\n");
 
-       while (serv_gets(buf), strcmp(buf,"000")) {
-               extract(fl,buf,0);
+       while (serv_gets(buf), strcmp(buf, "000")) {
+               extract_token(fl, buf, 0, '|', sizeof fl);
                has_bio = 0;
-               for (bptr=bio; bptr!=NULL; bptr=bptr->next) {
-                       if (!strcasecmp(fl,bptr->name)) has_bio = 1;
-                       }
-               wprintf("<TR><TD>");
+               for (bptr = bio; bptr != NULL; bptr = bptr->next) {
+                       if (!strcasecmp(fl, bptr->name))
+                               has_bio = 1;
+               }
+               bg = 1 - bg;
+               wprintf("<TR BGCOLOR=\"#%s\"><TD>",
+                       (bg ? "DDDDDD" : "FFFFFF")
+               );
                if (has_bio) {
                        wprintf("<A HREF=\"/showuser&who=");
                        urlescputs(fl);
                        wprintf("\">");
                        escputs(fl);
                        wprintf("</A>");
-                       }
-               else {
+               } else {
                        escputs(fl);
-                       }
+               }
                wprintf("</TD><TD>%ld</TD><TD>%d</TD><TD>",
-                       extract_long(buf,2),
-                       extract_int(buf,1));
-               lc = extract_long(buf,3);
-               tmbuf = (struct tm *)localtime(&lc);
+                       extract_long(buf, 2),
+                       extract_int(buf, 1));
+               lc = extract_long(buf, 3);
+               tmbuf = (struct tm *) localtime(&lc);
                wprintf("%02d/%02d/%04d ",
-                       (tmbuf->tm_mon+1),
+                       (tmbuf->tm_mon + 1),
                        tmbuf->tm_mday,
                        (tmbuf->tm_year + 1900));
-               
+
 
                wprintf("</TD><TD>%ld</TD><TD>%5ld</TD></TR>\n",
-                       extract_long(buf,4),extract_long(buf,5));
+                       extract_long(buf, 4), extract_long(buf, 5));
 
-               }
-       wprintf("</TABLE></CENTER>\n");
-DONE:   wprintf("</BODY></HTML>\n");
-        wDumpContent();
        }
+       wprintf("</table></div>\n");
+DONE:  wDumpContent(1);
+}
 
 
 /*
  * Display (non confidential) information about a particular user
  */
-void showuser(void) {
-       char who[256];
-       char buf[256];
+void showuser(void)
+{
+       char who[SIZ];
+       char buf[SIZ];
        int have_pic;
 
-        printf("HTTP/1.0 200 OK\n");
-        output_headers();
-        wprintf("<HTML><HEAD><TITLE>User profile</TITLE>\n");
-        wprintf("</HEAD><BODY BACKGROUND=\"/image&name=background\" TEXT=\"#000000\" LINK=\"#004400\">\n");
+       strcpy(who, bstr("who"));
 
+       output_headers(1, 1, 2, 0, 0, 0, 0);
+       wprintf("<div id=\"banner\">\n"
+               "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
+               "<SPAN CLASS=\"titlebar\">User profile</SPAN>"
+               "</TD></TR></TABLE>\n"
+               "</div>\n<div id=\"content\">\n"
+       );
 
-        wprintf("<TABLE WIDTH=100% BORDER=0 BGCOLOR=007700><TR><TD>");
-        wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"<B>User profile");
-        wprintf("</B></FONT></TD></TR></TABLE>\n");
+       wprintf("<div id=\"fix_scrollbar_bug\">"
+               "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
 
-       strcpy(who, bstr("who"));
        serv_printf("OIMG _userpic_|%s", who);
        serv_gets(buf);
-       if (buf[0]=='2') {
+       if (buf[0] == '2') {
                have_pic = 1;
                serv_puts("CLOS");
                serv_gets(buf);
-               }
-       else {
+       } else {
                have_pic = 0;
-               }
+       }
 
        wprintf("<CENTER><TABLE><TR><TD>");
        if (have_pic == 1) {
                wprintf("<IMG SRC=\"/image&name=_userpic_&parm=");
                urlescputs(who);
                wprintf("\">");
-               }
-       wprintf("</TD><TD><H1>%s</H1></TD></TR></TABLE></CENTER>\n",who);
-       serv_printf("RBIO %s",who);
+       }
+       wprintf("</TD><TD><H1>%s</H1></TD></TR></TABLE></CENTER>\n", who);
+       serv_printf("RBIO %s", who);
        serv_gets(buf);
-       if (buf[0]=='1') fmout(NULL);
-       wprintf("</BODY></HTML>\n");
-        wDumpContent();
+       if (buf[0] == '1') {
+               fmout(NULL, "JUSTIFY");
        }
+       wprintf("<br /><A HREF=\"/display_page&recp=");
+       urlescputs(who);
+       wprintf("\">"
+               "<IMG SRC=\"/static/page.gif\" ALIGN=MIDDLE BORDER=0>"
+               "&nbsp;&nbsp;"
+               "Click here to send an instant message to ");
+       escputs(who);
+       wprintf("</A>\n");
+
+       wprintf("</td></tr></table></div>\n");
+       wDumpContent(1);
+}