How about that ... we're now correctly handling the reply-references and carrying...
authorArt Cancro <ajc@citadel.org>
Sat, 11 Dec 2021 02:11:13 +0000 (21:11 -0500)
committerArt Cancro <ajc@citadel.org>
Sat, 11 Dec 2021 02:11:13 +0000 (21:11 -0500)
webcit-ng/http.c
webcit-ng/messages.c
webcit-ng/static/js/view_forum.js
webcit-ng/webcit.h

index 29a1fba6d5070e9ec4218d4fa5c6ae153c7e40c0..8daa52afa6985e6a05765307772c095513433da2 100644 (file)
@@ -173,6 +173,7 @@ void perform_one_http_transaction(struct client_handle *ch) {
                                kv.key = strdup(tok);
                                kv.val = strdup(eq);
                                array_append(h.request_parms, &kv);
+                               syslog(LOG_DEBUG, "\033[1m\033[33m| %s = %s\033[0m", kv.key, kv.val);
                        }
                }
        }
@@ -302,3 +303,20 @@ char *header_val(struct http_transaction *h, char *requested_header) {
        }
        return (NULL);
 }
+
+
+// Utility function to fetch a specific URL parameter from a completely read-in request.
+// Returns the value of the requested parameter, or NULL if the specified parameter was not sent.
+// The caller does NOT own the memory of the returned pointer, but can count on the pointer
+// to still be valid through the end of the transaction.
+char *get_url_param(struct http_transaction *h, char *requested_param) {
+       struct keyval *kv;
+       int i;
+       for (i=0; i<array_len(h->request_parms); ++i) {
+               kv = array_get_element_at(h->request_parms, i);
+               if (!strcasecmp(kv->key, requested_param)) {
+                       return (kv->val);
+               }
+       }
+       return (NULL);
+}
index 5ecfc165fdf39d4083aab4db1192a72b03e534cd..8412717965027f60e171042a1397bf8420aed1e4 100644 (file)
@@ -146,7 +146,13 @@ void dav_put_message(struct http_transaction *h, struct ctdlsession *c, char *eu
                return;
        }
 
-       ctdl_printf(c, "ENT0 1|||4|||1|");      // This protocol syntax will give us metadata back after upload
+       char *wefw = get_url_param(h, "wefw");  // references
+       if (!wefw) wefw = "";
+       char *subj = get_url_param(h, "subj");  // subject
+       if (!subj) subj = "";
+
+       // Mode 4 will give us metadata back after upload
+       ctdl_printf(c, "ENT0 1|||4|%s||1|||||%s|", subj, wefw);
        ctdl_readline(c, buf, sizeof buf);
        if (buf[0] != '8') {
                h->response_code = 502;
index d073b99ee37651ac837c2156ced8fdc36e36f703..79d0cbb11b3d76fceefc0ddc2cbfea1924587686 100644 (file)
@@ -258,13 +258,18 @@ function open_reply_box(prefix, msgnum, is_quoted, references, msgid) {
        + "</span>";                                                    // end buttons on right side
        if (msg.subj) {
                replybox +=
-               "<br><span class=\"ctdl-msgsubject\">" + "FIXME subject" + "</span>";
+               "<br><span id=\"ctdl-subject\" class=\"ctdl-msgsubject\">" + "FIXME subject" + "</span>";
+       }
+       else {                                                          // hidden filed for empty subject
+               replybox += "<span id=\"ctdl-subject\" style=\"display:none\"></span>";
        }
        replybox +=
          "</div><br>"                                                  // end header
+
+       + "<span id=\"ctdl-replyreferences\" style=\"display:none\">"   // hidden field for references
+       + compose_references(references,msgid) + "</span>"
                                                                        // begin body
        + "<div class=\"ctdl-msg-body\" id=\"ctdl-editor-body\" style=\"padding:5px;\" contenteditable=\"true\">"
-       + "refs: " + compose_references(references,msgid) + "<br>"
        + "\n"                                                          // empty initial content
        + "</div>"                                                      // end body
 
@@ -338,8 +343,13 @@ function forum_cancel_post(div_name) {
 function forum_save_message(div_name, reply_to_msgnum) {
 
        document.body.style.cursor = "wait";
+       wefw = (document.getElementById("ctdl-replyreferences").innerHTML).replaceAll("|","!"); // references (if present)
+       subj = document.getElementById("ctdl-subject").innerHTML;                               // subject (if present)
 
-       url = "/ctdl/r/" + escapeHTMLURI(current_room) + "/dummy_name_for_new_message";
+       url = "/ctdl/r/" + escapeHTMLURI(current_room)
+               + "/dummy_name_for_new_message"
+               + "?wefw=" + wefw
+               + "&subj=" + subj
        boundary = randomString(20);
        body_text =
                "--" + boundary + "\r\n"
index 06269da81553cfcf0bc7a5dd921dcb67f997a222..c3e326dfb7fd889b1351e5d204058ff23b365f72 100644 (file)
@@ -137,6 +137,7 @@ void ctdl_u(struct http_transaction *, struct ctdlsession *);
 struct ctdlsession *connect_to_citadel(struct http_transaction *);
 void disconnect_from_citadel(struct ctdlsession *);
 char *header_val(struct http_transaction *h, char *requested_header);
+char *get_url_param(struct http_transaction *h, char *requested_param);
 int unescape_input(char *);
 void http_redirect(struct http_transaction *h, char *to_where);
 char *http_datestring(time_t xtime);