]> code.citadel.org Git - citadel.git/blobdiff - webcit/webcit.c
wiki
[citadel.git] / webcit / webcit.c
index 046c603d738e6408dec77c9748727058139d4a3b..566720800a23fcd24c4c4252bf2ed17ce8021d5d 100644 (file)
@@ -390,8 +390,6 @@ void output_headers(        int do_httpheaders,     /* 1 = output HTTP headers
        /* ICONBAR */
        if (do_htmlhead) {
 
-               /* check for instant messages (these display in a new window) */
-               page_popup();
 
                /* check for ImportantMessages (these display in a div overlaying the main screen) */
                if (strlen(WC->ImportantMessage) > 0) {
@@ -404,11 +402,15 @@ void output_headers(      int do_httpheaders,     /* 1 = output HTTP headers
                                "</script>\n");
                        safestrncpy(WC->ImportantMessage, "", sizeof WC->ImportantMessage);
                }
+
                if ( (WC->logged_in) && (!unset_cookies) ) {
                        wprintf("<div id=\"iconbar\">");
                        do_selected_iconbar();
-                       wprintf("</div>\n");
+                       /* check for instant messages (these display in a new window) 
+                       page_popup();  */
+                       wprintf("</div>");
                }
+
                if (do_room_banner == 1) {
                        wprintf("<div id=\"banner\">\n");
                        embed_room_banner(NULL, navbar_default);
@@ -819,11 +821,9 @@ void ajax_servcmd(void)
 
        begin_ajax_response();
 
-       /* lprintf(9, "Sending cmd: %s\n", bstr("g_cmd")); */
        serv_printf("%s", bstr("g_cmd"));
        serv_getln(buf, sizeof buf);
        wprintf("%s\n", buf);
-       /* lprintf(9, "   Response: %s\n", buf); */
 
        if (buf[0] == '8') {
                serv_printf("\n\n000");
@@ -853,9 +853,42 @@ void ajax_servcmd(void)
        }
 
        end_ajax_response();
+       
+       /* This is kind of an ugly hack, but this is the only place it can go.
+        * If the command was GEXP, then the instant messenger window must be
+        * running, so reset the "last_pager_check" watchdog timer so
+        * that page_popup() doesn't try to open it a second time.
+        */
+       if (!strncasecmp(bstr("g_cmd"), "GEXP", 4)) {
+               WC->last_pager_check = time(NULL);
+       }
 }
 
 
+/*
+ * Helper function for the asynchronous check to see if we need
+ * to open the instant messenger window.
+ */
+void seconds_since_last_gexp(void)
+{
+       char buf[256];
+
+       begin_ajax_response();
+       if ( (time(NULL) - WC->last_pager_check) < 30) {
+               wprintf("NO\n");
+       }
+       else {
+               serv_puts("NOOP");
+               serv_getln(buf, sizeof buf);
+               if (buf[3] == '*') {
+                       wprintf("YES");
+               }
+               else {
+                       wprintf("NO");
+               }
+       }
+       end_ajax_response();
+}
 
 
 
@@ -1248,6 +1281,8 @@ void session_loop(struct httprequest *req)
                display_main_menu();
        } else if (!strcasecmp(action, "who")) {
                who();
+       } else if (!strcasecmp(action, "sslg")) {
+               seconds_since_last_gexp();
        } else if (!strcasecmp(action, "who_inner_html")) {
                begin_ajax_response();
                who_inner_div();
@@ -1292,6 +1327,8 @@ void session_loop(struct httprequest *req)
                print_message(arg1);
        } else if (!strcasecmp(action, "msgheaders")) {
                display_headers(arg1);
+       } else if (!strcasecmp(action, "wiki")) {
+               display_wiki_page();
        } else if (!strcasecmp(action, "display_enter")) {
                display_enter();
        } else if (!strcasecmp(action, "post")) {
@@ -1339,7 +1376,7 @@ void session_loop(struct httprequest *req)
        } else if (!strcasecmp(action, "editinfo")) {
                save_edit(_("Room info"), "EINF 1", 1);
        } else if (!strcasecmp(action, "display_editbio")) {
-               sprintf(buf, "RBIO %s", WC->wc_username);
+               sprintf(buf, "RBIO %s", WC->wc_fullname);
                display_edit(_("Your bio"), "NOOP", buf, "editbio", 3);
        } else if (!strcasecmp(action, "editbio")) {
                save_edit(_("Your bio"), "EBIO", 0);