Removed an unused parameter from CtdlSubmitMsg(). Why was it even there?
[citadel.git] / citadel / modules / wiki / serv_wiki.c
index 20a3103981044703f74fbb5208a2164ead4d0fa0..e5d2f545533de44f133d74e6820757ffe111bf30 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Server-side module for Wiki rooms.  This handles things like version control. 
  * 
- * Copyright (c) 2009-2012 by the citadel.org team
+ * Copyright (c) 2009-2020 by the citadel.org team
  *
  * This program is open source software.  You can redistribute it and/or
  * modify it under the terms of the GNU General Public License, version 3.
@@ -90,6 +90,8 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
        char *diffbuf = NULL;
        size_t diffbuf_len = 0;
        char *ptr = NULL;
+       long newmsgid;
+       StrBuf *msgidbuf;
 
        if (!CCC->logged_in) return(0); /* Only do this if logged in. */
 
@@ -105,6 +107,17 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
        /* If there's no EUID we can't do this.  Reject the post. */
        if (CM_IsEmpty(msg, eExclusiveID)) return(1);
 
+       newmsgid = get_new_message_number();
+       msgidbuf = NewStrBuf();
+       StrBufPrintf(msgidbuf, "%08lX-%08lX@%s/%s",
+                    (long unsigned int) time(NULL),
+                    (long unsigned int) newmsgid,
+                    CtdlGetConfigStr("c_fqdn"),
+                    msg->cm_fields[eExclusiveID]
+               );
+
+       CM_SetAsFieldSB(msg, emessageId, &msgidbuf);
+
        history_page_len = snprintf(history_page, sizeof history_page,
                                    "%s_HISTORY_", msg->cm_fields[eExclusiveID]);
 
@@ -127,7 +140,7 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
        /* See if we can retrieve the previous version. */
        old_msgnum = CtdlLocateMessageByEuid(msg->cm_fields[eExclusiveID], &CCC->room);
        if (old_msgnum > 0L) {
-               old_msg = CtdlFetchMessage(old_msgnum, 1, 1);
+               old_msg = CtdlFetchMessage(old_msgnum, 1);
        }
        else {
                old_msg = NULL;
@@ -208,7 +221,7 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
        history_msgnum = CtdlLocateMessageByEuid(history_page, &CCC->room);
        history_msg = NULL;
        if (history_msgnum > 0L) {
-               history_msg = CtdlFetchMessage(history_msgnum, 1, 1);
+               history_msg = CtdlFetchMessage(history_msgnum, 1);
        }
 
        /* Create a new history message if necessary */
@@ -222,7 +235,9 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
                history_msg->cm_anon_type = MES_NORMAL;
                history_msg->cm_format_type = FMT_RFC822;
                CM_SetField(history_msg, eAuthor, HKEY("Citadel"));
-               CM_SetField(history_msg, eRecipient, CCC->room.QRname, strlen(CCC->room.QRname));
+               if (!IsEmptyStr(CCC->room.QRname)){
+                       CM_SetField(history_msg, eRecipient, CCC->room.QRname, strlen(CCC->room.QRname));
+               }
                CM_SetField(history_msg, eExclusiveID, history_page, history_page_len);
                CM_SetField(history_msg, eMsgSubject, history_page, history_page_len);
                CM_SetField(history_msg, eSuppressIdx, HKEY("1")); /* suppress full text indexing */
@@ -303,7 +318,7 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
                                           uuid,
                                           Now,
                                           CCC->user.fullname,
-                                          config.c_nodename);
+                                          CtdlGetConfigStr("c_nodename"));
 
                        memolen = CtdlEncodeBase64(encoded_memo, memo, memolen, 0);
 
@@ -337,7 +352,7 @@ int wiki_upload_beforesave(struct CtdlMessage *msg, recptypes *recp) {
 
                CM_SetFieldLONG(history_msg, eTimestamp, Now);
        
-               CtdlSubmitMsg(history_msg, NULL, "", 0);
+               CtdlSubmitMsg(history_msg, NULL, "");
        }
        else {
                syslog(LOG_ALERT, "Empty boundary string in history message.  No history!\n");
@@ -390,7 +405,7 @@ void wiki_history(char *pagename) {
        snprintf(history_page_name, sizeof history_page_name, "%s_HISTORY_", pagename);
        msgnum = CtdlLocateMessageByEuid(history_page_name, &CC->room);
        if (msgnum > 0L) {
-               msg = CtdlFetchMessage(msgnum, 1, 1);
+               msg = CtdlFetchMessage(msgnum, 1);
        }
        else {
                msg = NULL;
@@ -522,7 +537,7 @@ void wiki_rev(char *pagename, char *rev, char *operation)
         */
        msgnum = CtdlLocateMessageByEuid(pagename, &CCC->room);
        if (msgnum > 0L) {
-               msg = CtdlFetchMessage(msgnum, 1, 1);
+               msg = CtdlFetchMessage(msgnum, 1);
        }
        else {
                msg = NULL;
@@ -547,7 +562,7 @@ void wiki_rev(char *pagename, char *rev, char *operation)
                fclose(fp);
        }
        else {
-               syslog(LOG_ALERT, "Cannot open %s: %s\n", temp, strerror(errno));
+               syslog(LOG_ERR, "%s: %m", temp);
        }
        CM_Free(msg);
 
@@ -556,7 +571,7 @@ void wiki_rev(char *pagename, char *rev, char *operation)
        snprintf(history_page_name, sizeof history_page_name, "%s_HISTORY_", pagename);
        msgnum = CtdlLocateMessageByEuid(history_page_name, &CCC->room);
        if (msgnum > 0L) {
-               msg = CtdlFetchMessage(msgnum, 1, 1);
+               msg = CtdlFetchMessage(msgnum, 1);
        }
        else {
                msg = NULL;
@@ -618,7 +633,7 @@ void wiki_rev(char *pagename, char *rev, char *operation)
                else if (!strcasecmp(operation, "fetch")) {
                        CM_SetField(msg, eAuthor, HKEY("Citadel"));
                        CtdlCreateRoom(wwm, 5, "", 0, 1, 1, VIEW_BBS);  /* Not an error if already exists */
-                       msgnum = CtdlSubmitMsg(msg, NULL, wwm, 0);      /* Store the revision here */
+                       msgnum = CtdlSubmitMsg(msg, NULL, wwm);         /* Store the revision here */
 
                        /*
                         * WARNING: VILE SLEAZY HACK
@@ -640,12 +655,22 @@ void wiki_rev(char *pagename, char *rev, char *operation)
                }
                else if (!strcasecmp(operation, "revert")) {
                        CM_SetFieldLONG(msg, eTimestamp, time(NULL));
-                       CM_SetField(msg, eAuthor, CCC->user.fullname, strlen(CCC->user.fullname));
-                       CM_SetField(msg, erFc822Addr, CCC->cs_inet_email, strlen(CCC->cs_inet_email));
-                       CM_SetField(msg, eOriginalRoom, CCC->room.QRname, strlen(CCC->room.QRname));
-                       CM_SetField(msg, eNodeName, CFG_KEY(c_nodename));
-                       CM_SetField(msg, eExclusiveID, pagename, strlen(pagename));
-                       msgnum = CtdlSubmitMsg(msg, NULL, "", 0);       /* Replace the current revision */
+                       if (!IsEmptyStr(CCC->user.fullname)) {
+                               CM_SetField(msg, eAuthor, CCC->user.fullname, strlen(CCC->user.fullname));
+                       }
+
+                       if (!IsEmptyStr(CCC->cs_inet_email)) {
+                               CM_SetField(msg, erFc822Addr, CCC->cs_inet_email, strlen(CCC->cs_inet_email));
+                       }
+
+                       if (!IsEmptyStr(CCC->room.QRname)) {
+                               CM_SetField(msg, eOriginalRoom, CCC->room.QRname, strlen(CCC->room.QRname));
+                       }
+
+                       if (!IsEmptyStr(pagename)) {
+                               CM_SetField(msg, eExclusiveID, pagename, strlen(pagename));
+                       }
+                       msgnum = CtdlSubmitMsg(msg, NULL, "");          /* Replace the current revision */
                }
                else {
                        /* Theoretically it is impossible to get here, but throw an error anyway */