Nearly all <FORM> blocks now contain a hidden input
[citadel.git] / webcit / paging.c
index 097b6b74ba6b68caccb2508610b3c7f8e2dc81cb..0932db026f6fc84f756de5455980816cf7869b7b 100644 (file)
@@ -3,6 +3,7 @@
  */
 /**
  * \defgroup PageFunc Functions which implement the chat and paging facilities.
+ * \ingroup ClientPower
  */
 /*@{*/
 #include "webcit.h"
@@ -18,7 +19,7 @@ void display_page(void)
 
         output_headers(1, 1, 2, 0, 0, 0);
         wprintf("<div id=\"banner\">\n"
-                "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
+                "<TABLE class=\"paging_banner\"><TR><TD>"
                 "<SPAN CLASS=\"titlebar\">");
        wprintf(_("Send instant message"));
        wprintf("</SPAN>"
@@ -27,13 +28,14 @@ void display_page(void)
         );
                                                                                                                              
         wprintf("<div class=\"fix_scrollbar_bug\">"
-               "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
+               "<table class=\"paging_background\"><tr><td>\n");
 
        wprintf(_("Send an instant message to: "));
        escputs(recp);
        wprintf("<br>\n");
 
        wprintf("<FORM METHOD=\"POST\" action=\"page_user\">\n");
+       wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
 
        wprintf("<TABLE border=0 width=100%%><TR><TD>\n");
 
@@ -41,10 +43,6 @@ void display_page(void)
        escputs(recp);
        wprintf("\">\n");
 
-       wprintf("<INPUT TYPE=\"hidden\" NAME=\"closewin\" VALUE=\"");
-       escputs(bstr("closewin"));
-       wprintf("\">\n");
-
        wprintf(_("Enter message text:"));
        wprintf("<br />");
 
@@ -66,51 +64,37 @@ void display_page(void)
  */
 void page_user(void)
 {
-       char recp[SIZ];
-       char buf[SIZ];
-       char closewin[SIZ];
+       char recp[256];
+       char buf[256];
 
-        output_headers(1, 1, 2, 0, 0, 0);
-        wprintf("<div id=\"banner\">\n"
-                "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
-                "<SPAN CLASS=\"titlebar\">");
-       wprintf(_("Add or edit an event"));
-       wprintf("</SPAN>"
-                "</TD></TR></TABLE>\n"
-                "</div>\n<div id=\"content\">\n"
-        );
-                                                                                                                             
-       strcpy(recp, bstr("recp"));
-       strcpy(closewin, bstr("closewin"));
+       safestrncpy(recp, bstr("recp"), sizeof recp);
 
        if (strlen(bstr("send_button")) == 0) {
-               wprintf("<EM>");
-               wprintf(_("Message was not sent."));
-               wprintf("</EM><br />\n");
+               safestrncpy(WC->ImportantMessage,
+                       _("Message was not sent."),
+                       sizeof WC->ImportantMessage
+               );
        } else {
                serv_printf("SEXP %s|-", recp);
                serv_getln(buf, sizeof buf);
 
                if (buf[0] == '4') {
-                       text_to_server(bstr("msgtext"), 0);
+                       text_to_server(bstr("msgtext"));
                        serv_puts("000");
-                       wprintf("<EM>");
-                       wprintf(_("Message has been sent to "));
-                       escputs(recp);
-                       wprintf(".</EM><br />\n");
+                       stresc(buf, recp, 0, 0);
+                       snprintf(WC->ImportantMessage,
+                               sizeof WC->ImportantMessage,
+                               "%s%s.",
+                               _("Message has been sent to "),
+                               buf
+                       );
                }
                else {
-                       wprintf("<EM>%s</EM><br />\n", &buf[4]);
+                       safestrncpy(WC->ImportantMessage, &buf[4], sizeof WC->ImportantMessage);
                }
        }
-       
-       if (!strcasecmp(closewin, "yes")) {
-               wprintf("<CENTER><a href=\"javascript:window.close();\">");
-               wprintf(_("[ close window ]"));
-               wprintf("</A></CENTER>\n");
-       }
 
-       wDumpContent(1);
+       who();
 }
 
 
@@ -160,34 +144,52 @@ void page_popup(void)
 {
        char buf[SIZ];
 
+       /** JavaScript function to alert the user that popups are probably blocked */
+       wprintf("<script type=\"text/javascript\">      "
+               "function PopUpFailed() {       "
+               " alert(\"%s\");        "
+               "}      "
+               "</script>\n",
+               _("You have one or more instant messages waiting, but the Citadel Instant Messenger "
+                 "window failed to open.  This is probably because you have a popup blocker "
+                 "installed.  Please configure your popup blocker to allow popups from this site "
+                 "if you wish to receive instant messages.")
+       );
+
        /** First, do the check as part of our page load. */
        serv_puts("NOOP");
        serv_getln(buf, sizeof buf);
        if (buf[3] == '*') {
                if ((time(NULL) - WC->last_pager_check) > 60) {
                        wprintf("<script type=\"text/javascript\">"
-                               " window.open('static/instant_messenger.html', 'CTDL_MESSENGER', "
-                               " 'width=700,height=400');"
+                               " var oWin = window.open('static/instant_messenger.html', "
+                               " 'CTDL_MESSENGER', 'width=700,height=400');    "
+                               " if (oWin==null || typeof(oWin)==\"undefined\") {      "
+                               "  PopUpFailed();       "
+                               " }     "
                                "</script>"
                        );      
                }
        }
 
        /** Then schedule it to happen again a minute from now if the user is idle. */
-       wprintf("<script type=\"text/javascript\">      \n"
-               " function HandleSslp(sslg_xmlresponse) {       \n"
-               "  sslg_response = sslg_xmlresponse.responseText.substr(0, 1);  \n"
-               "  if (sslg_response == 'Y') {  \n"
-               "   window.open('static/instant_messenger.html', 'CTDL_MESSENGER',      \n"
-               "    'width=700,height=400');   \n"
-               "   }   \n"
-               " }     \n"
-               " function CheckPager() {       \n"
-               "  new Ajax.Request('sslg', { method: 'get', parameters: Math.random(), \n"
-               "   onSuccess: HandleSslp } );  \n"
-               " }     \n"
-               " new PeriodicalExecuter(CheckPager, 30);       \n"
-               "</script>      \n"
+       wprintf("<script type=\"text/javascript\">      "
+               " function HandleSslp(sslg_xmlresponse) {       "
+               "  sslg_response = sslg_xmlresponse.responseText.substr(0, 1);  "
+               "  if (sslg_response == 'Y') {  "
+               "   var oWin = window.open('static/instant_messenger.html', 'CTDL_MESSENGER',   "
+               "    'width=700,height=400');   "
+               "   if (oWin==null || typeof(oWin)==\"undefined\") {    "
+               "    PopUpFailed();     "
+               "   }   "
+               "  }    "
+               " }     "
+               " function CheckPager() {       "
+               "  new Ajax.Request('sslg', { method: 'get', parameters: CtdlRandomString(),    "
+               "   onSuccess: HandleSslp } );  "
+               " }     "
+               " new PeriodicalExecuter(CheckPager, 30);       "
+               "</script>      "
        );
 }
 
@@ -482,6 +484,7 @@ void chat_send(void) {
        WC->chat_sock = i;
 
        wprintf("<FORM METHOD=\"POST\" action=\"chat_send\" NAME=\"chatsendform\">\n");
+       wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
        wprintf("<INPUT TYPE=\"text\" SIZE=\"80\" MAXLENGTH=\"%d\" "
                "NAME=\"send_this\">\n", SIZ-10);
        wprintf("<br />");