]> code.citadel.org Git - citadel.git/blobdiff - webcit/messages.c
* add new 'Context' Parameter to the template call
[citadel.git] / webcit / messages.c
index 06ca707ca861a22195615e1f9483552adbb9d778..19f29b0451169853c971c138eb74bcb3403092bc 100644 (file)
@@ -1411,13 +1411,13 @@ void print_message(void) {
        msgnum = StrTol(WC->UrlFragment1);
        output_headers(0, 0, 0, 0, 0, 0);
 
-       wprintf("Content-type: text/html\r\n"
+       hprintf("Content-type: text/html\r\n"
                "Server: %s\r\n"
                "Connection: close\r\n",
                PACKAGE_STRING);
        begin_burst();
 
-       wprintf("\r\n\r\n<html>\n<head><title>");
+       wprintf("\r\n<html>\n<head><title>");
        escputs(WC->wc_fullname);
        wprintf("</title></head>\n"
                "<body onLoad=\" window.print(); window.close(); \">\n"
@@ -1429,7 +1429,20 @@ void print_message(void) {
        wDumpContent(0);
 }
 
-
+/* 
+ * Mobile browser view of message
+ *
+ * @param msg_num_as_string Message number as a string instead of as a long int 
+ */
+void mobile_message_view(void) {
+  long msgnum = 0L;
+  msgnum = StrTol(WC->UrlFragment1);
+  output_headers(1, 0, 0, 0, 0, 1);
+  begin_burst();
+  do_template("msgcontrols", NULL);
+  read_message(msgnum,1, "");
+  wDumpContent(0);
+}
 
 /**
  * \brief Display a message's headers
@@ -1443,7 +1456,7 @@ void display_headers(void) {
        msgnum = StrTol(WC->UrlFragment1);
        output_headers(0, 0, 0, 0, 0, 0);
 
-       wprintf("Content-type: text/plain\r\n"
+       hprintf("Content-type: text/plain\r\n"
                "Server: %s\r\n"
                "Connection: close\r\n",
                PACKAGE_STRING);
@@ -1833,12 +1846,12 @@ void display_mobile_summary(int num) {
                (WC->summ[num].is_new ? "bold" : "normal"),
                WC->summ[num].msgnum
        );
-               wprintf("<span>%s</span>",WC->summ[num].from);
+               wprintf("<span class=\"from\">%s</span>",WC->summ[num].from);
                wprintf("<span style=\"float: right;\">");
                webcit_fmt_date(datebuf, WC->summ[num].date, 1);        /* brief */
-       escputs(datebuf);
+               escputs(datebuf);
                wprintf("</span><br/><span class=\"subject\">");
-               wprintf(WC->summ[num].subj);
+               escputs(WC->summ[num].subj);
                wprintf("</span></div><div id=\"m_%ld\" class=\"msgview\" onMouseDown=\"\"></div></div>",WC->summ[num].msgnum);
 }
 
@@ -2401,7 +2414,7 @@ const int SenderInvertSortString[eUnSet] =  { eSender, eSender, eSender, eSender
  * \return the enum matching the string; defaults to RDate
  */
 //SortByEnum 
-int StrToESort (StrBuf *sortby)
+int StrToESort (const StrBuf *sortby)
 {
        int result = eDate;
 
@@ -2445,11 +2458,10 @@ void readloop(char *oper)
        int highest_displayed = 0;
        struct addrbookent *addrbook = NULL;
        int num_ab = 0;
-       StrBuf *sortby = NULL;
+       const StrBuf *sortby = NULL;
        //SortByEnum 
        int SortBy = eRDate;
-       StrBuf *sortpref_name;
-       StrBuf *sortpref_value;
+       const StrBuf *sortpref_value;
        int bbs_reverse = 0;
        struct wcsession *WCC = WC;     /* This is done to make it run faster; WC is a function */
 
@@ -2464,19 +2476,16 @@ void readloop(char *oper)
        is_summary = (ibstr("is_summary") && !WCC->is_mobile);
        if (maxmsgs == 0) maxmsgs = DEFAULT_MAXMSGS;
 
-       sortpref_name = NewStrBuf ();
-       StrBufPrintf(sortpref_name, "sort %s", WCC->wc_roomname);
-       get_pref(sortpref_name, &sortpref_value);
+       sortpref_value = get_room_pref("sort");
 
-       sortby = NewStrBufPlain(bstr("sortby"), -1);
+       sortby = sbstr("sortby");
        if ( (!IsEmptyStr(ChrPtr(sortby))) && 
             (strcasecmp(ChrPtr(sortby), ChrPtr(sortpref_value)) != 0)) {
-               set_pref(sortpref_name, sortby, 1);
+               set_room_pref("sort", NewStrBufDup(sortby), 1);
                sortpref_value = NULL;
                sortpref_value = sortby;
        }
-       
-       FreeStrBuf(&sortpref_name);
+
        SortBy = StrToESort(sortpref_value);
        /** message board sort */
        if (SortBy == eReverse) {
@@ -2526,7 +2535,7 @@ void readloop(char *oper)
                maxmsgs = 9999999;
        }
 
-       if (is_summary || WCC->is_mobile) {                     /**< fetch header summary */
+       if (is_summary) {                       /**< fetch header summary */
                snprintf(cmd, sizeof(cmd), "MSGS %s|%s||1",
                        (!strcmp(oper, "do_search") ? "SEARCH" : "ALL"),
                        (!strcmp(oper, "do_search") ? bstr("query") : "")
@@ -2536,6 +2545,10 @@ void readloop(char *oper)
        } 
        if (WCC->is_mobile) {
                maxmsgs = 20;
+               snprintf(cmd, sizeof(cmd), "MSGS %s|%s||1",
+                       (!strcmp(oper, "do_search") ? "SEARCH" : "ALL"),
+                       (!strcmp(oper, "do_search") ? bstr("query") : "")
+               );
                SortBy =  eRDate;
        }
 
@@ -3066,33 +3079,24 @@ void post_mime_to_server(void) {
  */
 void post_message(void)
 {
-       urlcontent *u;
-       void *U;
        char buf[1024];
-       char *encoded_subject = NULL;
+       StrBuf *encoded_subject = NULL;
        static long dont_post = (-1L);
        struct wc_attachment *att, *aptr;
        int is_anonymous = 0;
-       const char *display_name;
-       long dpLen = 0;
+       const StrBuf *display_name = NULL;
        struct wcsession *WCC = WC;
-       char *ptr = NULL;
-
+       
        if (havebstr("force_room")) {
                gotoroom(bstr("force_room"));
        }
 
-       if (GetHash(WC->urlstrings, HKEY("display_name"), &U)) {
-               u = (urlcontent*) U;
-               display_name = u->url_data;
-               dpLen = u->url_data_size;
-       }
-       else {
-               display_name="";
-       }
-       if (!strcmp(display_name, "__ANONYMOUS__")) {
-               display_name = "";
-               is_anonymous = 1;
+       if (havebstr("display_name")) {
+               display_name = sbstr("display_name");
+               if (!strcmp(ChrPtr(display_name), "__ANONYMOUS__")) {
+                       display_name = NULL;
+                       is_anonymous = 1;
+               }
        }
 
        if (WCC->upload_length > 0) {
@@ -3151,71 +3155,65 @@ void post_message(void)
                        "saved this message."));
        } else {
                const char CMD[] = "ENT0 1|%s|%d|4|%s|%s||%s|%s|%s|%s|%s";
-               const char *Recp = ""; 
-               const char *Cc = "";
-               const char *Bcc = "";
-               const char *Wikipage = "";
-               const char *my_email_addr = "";
-               char *CmdBuf = NULL;;
-               long len = 0;
-               size_t nLen;
-               char references[SIZ] = "";
-               size_t references_len = 0;
-
-               safestrncpy(references, bstr("references"), sizeof references);
-               lprintf(9, "Converting: %s\n", references);
-               for (ptr=references; *ptr != 0; ++ptr) {
-                       if (*ptr == '|') *ptr = '!';
-                       ++references_len;
-               } 
-               lprintf(9, "Converted: %s\n", references);
-
+               const StrBuf *Recp = NULL; 
+               const StrBuf *Cc = NULL;
+               const StrBuf *Bcc = NULL;
+               const StrBuf *Wikipage = NULL;
+               const StrBuf *my_email_addr = NULL;
+               StrBuf *CmdBuf = NULL;;
+               StrBuf *references = NULL;
+
+               if (havebstr("references"))
+               {
+                       const StrBuf *ref = sbstr("references");
+                       references = NewStrBufPlain(ChrPtr(ref), StrLength(ref));
+                       lprintf(9, "Converting: %s\n", ChrPtr(references));
+                       StrBufReplaceChars(references, '|', '!');
+                       lprintf(9, "Converted: %s\n", ChrPtr(references));
+               }
                if (havebstr("subject")) {
-                       char *Subj;
-                       size_t SLen;
+                       const StrBuf *Subj;
                        /*
                         * make enough room for the encoded string; 
                         * plus the QP header 
                         */
-                       Subj = xbstr("subject", &SLen);
-                       len = SLen * 3 + 32;
-                       encoded_subject = malloc (len);
-                       len = webcit_rfc2047encode(encoded_subject, len, Subj, SLen);
-                       if (len < 0) {
-                               free (encoded_subject);
-                               return;
-                       }
-               }
-               len += sizeof (CMD) + dpLen;
-               Recp = xbstr("recp", &nLen);
-               len += nLen;
-               Cc = xbstr("cc", &nLen);
-               len += nLen;
-               Bcc = xbstr("bcc", &nLen);
-               len += nLen;
-               Wikipage = xbstr("wikipage", &nLen);
-               len += nLen;
-               my_email_addr = xbstr("my_email_addr", &nLen);
-               len += nLen;
-               len += references_len;
-
-               CmdBuf = (char*) malloc (len + 11);
-
-               snprintf(CmdBuf, len + 1, CMD,
-                       Recp,
-                       is_anonymous,
-                       (encoded_subject ? encoded_subject : ""),
-                       display_name,
-                       Cc,
-                       Bcc,
-                       Wikipage,
-                       my_email_addr,
-                       references);
+                       Subj = sbstr("subject");
+                       
+                       StrBufRFC2047encode(&encoded_subject, Subj);
+               }
+               Recp = sbstr("recp");
+               Cc = sbstr("cc");
+               Bcc = sbstr("bcc");
+               Wikipage = sbstr("wikipage");
+               my_email_addr = sbstr("my_email_addr");
+               
+               CmdBuf = NewStrBufPlain(NULL, 
+                                       sizeof (CMD) + 
+                                       StrLength(Recp) + 
+                                       StrLength(encoded_subject) +
+                                       StrLength(Cc) +
+                                       StrLength(Bcc) + 
+                                       StrLength(Wikipage) +
+                                       StrLength(my_email_addr) + 
+                                       StrLength(references));
+
+               StrBufPrintf(CmdBuf, 
+                            CMD,
+                            ChrPtr(Recp),
+                            is_anonymous,
+                            ChrPtr(encoded_subject),
+                            ChrPtr(display_name),
+                            ChrPtr(Cc),
+                            ChrPtr(Bcc),
+                            ChrPtr(Wikipage),
+                            ChrPtr(my_email_addr),
+                            ChrPtr(references));
+
                lprintf(9, "%s\n", CmdBuf);
-               serv_puts(CmdBuf);
+               serv_puts(ChrPtr(CmdBuf));
                serv_getln(buf, sizeof buf);
-               free (CmdBuf);
-               if (encoded_subject) free(encoded_subject);
+               FreeStrBuf(&CmdBuf);
+               FreeStrBuf(&encoded_subject);
                if (buf[0] == '4') {
                        post_mime_to_server();
                        if (  (havebstr("recp"))
@@ -3271,14 +3269,13 @@ void display_enter(void)
        char buf[SIZ];
        StrBuf *ebuf;
        long now;
-       char *display_name;
+       const StrBuf *display_name = NULL;
        struct wc_attachment *att;
        int recipient_required = 0;
        int subject_required = 0;
        int recipient_bad = 0;
        int is_anonymous = 0;
        long existing_page = (-1L);
-       size_t dplen;
        struct wcsession *WCC = WC;
 
        now = time(NULL);
@@ -3287,10 +3284,9 @@ void display_enter(void)
                gotoroom(bstr("force_room"));
        }
 
-       display_name = xbstr("display_name", &dplen);
-       if (!strcmp(display_name, "__ANONYMOUS__")) {
-               display_name = "";
-               dplen = 0;
+       display_name = sbstr("display_name");
+       if (!strcmp(ChrPtr(display_name), "__ANONYMOUS__")) {
+               display_name = NULL;
                is_anonymous = 1;
        }
 
@@ -3352,34 +3348,37 @@ void display_enter(void)
 
        /* Now check our actual recipients if there are any */
        if (recipient_required) {
-               const char *Recp = ""; 
-               const char *Cc = "";
-               const char *Bcc = "";
-               const char *Wikipage = "";
-               char *CmdBuf = NULL;;
-               size_t len = 0;
-               size_t nLen;
+               const StrBuf *Recp = NULL; 
+               const StrBuf *Cc = NULL;
+               const StrBuf *Bcc = NULL;
+               const StrBuf *Wikipage = NULL;
+               StrBuf *CmdBuf = NULL;;
                const char CMD[] = "ENT0 0|%s|%d|0||%s||%s|%s|%s";
                
-               len = sizeof(CMD) + dplen;
-               Recp = xbstr("recp", &nLen);
-               len += nLen;
-               Cc = xbstr("cc", &nLen);
-               len += nLen;
-               Bcc = xbstr("bcc", &nLen);
-               len += nLen;
-               Wikipage = xbstr("wikipage", &nLen);
-               len += nLen;
+               Recp = sbstr("recp");
+               Cc = sbstr("cc");
+               Bcc = sbstr("bcc");
+               Wikipage = sbstr("wikipage");
                
-
-               CmdBuf = (char*) malloc (len + 1);
-
-               snprintf(CmdBuf, len, CMD,
-                        Recp, is_anonymous,
-                        display_name,
-                        Cc, Bcc, Wikipage);
-               serv_puts(CmdBuf);
+               CmdBuf = NewStrBufPlain(NULL, 
+                                       sizeof (CMD) + 
+                                       StrLength(Recp) + 
+                                       StrLength(display_name) +
+                                       StrLength(Cc) +
+                                       StrLength(Bcc) + 
+                                       StrLength(Wikipage));
+
+               StrBufPrintf(CmdBuf, 
+                            CMD,
+                            ChrPtr(Recp), 
+                            is_anonymous,
+                            ChrPtr(display_name),
+                            ChrPtr(Cc), 
+                            ChrPtr(Bcc), 
+                            ChrPtr(Wikipage));
+               serv_puts(ChrPtr(CmdBuf));
                serv_getln(buf, sizeof buf);
+               FreeStrBuf(&CmdBuf);
 
                if (!strncmp(buf, "570", 3)) {  /** 570 means we have an invalid recipient listed */
                        if (havebstr("recp") && 
@@ -3661,7 +3660,7 @@ void display_enter(void)
         * The following template embeds the TinyMCE richedit control, and automatically
         * transforms the textarea into a richedit textarea.
         */
-       do_template("richedit");
+       do_template("richedit", NULL);
 
        /** Enumerate any attachments which are already in place... */
        wprintf("<div class=\"attachment buttons\"><img src=\"static/diskette_24x.gif\" class=\"imgedit\" > ");
@@ -3823,6 +3822,7 @@ InitModule_MSG
        WebcitAddUrlHandler(HKEY("confirm_move_msg"), confirm_move_msg, 0);
        WebcitAddUrlHandler(HKEY("msg"), embed_message, NEED_URL|AJAX);
        WebcitAddUrlHandler(HKEY("printmsg"), print_message, NEED_URL);
+       WebcitAddUrlHandler(HKEY("mobilemsg"), mobile_message_view, NEED_URL);
        WebcitAddUrlHandler(HKEY("msgheaders"), display_headers, NEED_URL);
        return ;
 }