* Implemented support for the new 'anyone can delete' flag
authorArt Cancro <ajc@citadel.org>
Wed, 28 Mar 2007 20:19:02 +0000 (20:19 +0000)
committerArt Cancro <ajc@citadel.org>
Wed, 28 Mar 2007 20:19:02 +0000 (20:19 +0000)
webcit/configure.ac
webcit/messages.c
webcit/roomops.c
webcit/webcit.h

index d0af2ee792c55a5ae7eab2848157c6933e9b7db7..6159ef0d8b7ee3bddc424cf1e08086f3ff1e33f6 100644 (file)
@@ -4,7 +4,7 @@ AC_INIT(webserver.c)
 
 
 PACKAGE=webcit
-VERSION=7.06
+VERSION=7.07
 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
 AC_SUBST(PACKAGE)
index d4e3be21c742a81a3b32f85f88d4adb89ed788dd..3bba9f7e95d672cf613a9d566510272486a24640 100644 (file)
@@ -972,7 +972,7 @@ void read_message(long msgnum, int printable_view, char *section) {
                }
 
                /** If this is one of my own rooms, or if I'm an Aide or Room Aide, I can move/delete */
-               if ( (WC->is_room_aide) || (WC->is_mailbox) ) {
+               if ( (WC->is_room_aide) || (WC->is_mailbox) || (WC->room_flags2 & QR2_COLLABDEL) ) {
                        /** Move */
                        wprintf("<a href=\"confirm_move_msg?msgid=%ld\">[%s]</a> ",
                                msgnum, _("Move"));
index f71830a61fb33c459e86b6d78ac99b4df5ab8914..6c7adfd35b9b12412bb5465b4555f32128848ed3 100644 (file)
@@ -197,7 +197,6 @@ void listrms(char *variety)
        struct roomlisting *rp;
        struct roomlisting *rs;
 
-
        /** Ask the server for a room list */
        serv_puts(variety);
        serv_getln(buf, sizeof buf);
@@ -205,6 +204,7 @@ void listrms(char *variety)
                wprintf("&nbsp;");
                return;
        }
+
        while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
                ++num_rooms;
                rp = malloc(sizeof(struct roomlisting));
@@ -741,6 +741,7 @@ int gotoroom(char *gname)
        WC->wc_view = extract_int(&buf[4], 11);
        WC->wc_default_view = extract_int(&buf[4], 12);
        WC->wc_is_trash = extract_int(&buf[4], 13);
+       WC->room_flags2 = extract_int(&buf[4], 14);
 
        if (WC->is_aide)
                WC->is_room_aide = WC->is_aide;
@@ -992,15 +993,16 @@ int self_service(int newval) {
 void display_editroom(void)
 {
        char buf[SIZ];
-       char cmd[SIZ];
-       char node[SIZ];
-       char remote_room[SIZ];
-       char recp[SIZ];
+       char cmd[1024];
+       char node[256];
+       char remote_room[128];
+       char recp[1024];
        char er_name[128];
        char er_password[10];
        char er_dirname[15];
        char er_roomaide[26];
        unsigned er_flags;
+       unsigned er_flags2;
        int er_floor;
        int i, j;
        char *tab;
@@ -1028,6 +1030,7 @@ void display_editroom(void)
        extract_token(er_dirname, &buf[4], 2, '|', sizeof er_dirname);
        er_flags = extract_int(&buf[4], 3);
        er_floor = extract_int(&buf[4], 4);
+       er_flags2 = extract_int(&buf[4], 7);
 
        output_headers(1, 1, 1, 0, 0, 0);
 
@@ -1236,6 +1239,12 @@ void display_editroom(void)
                wprintf("> ");
                wprintf(_("Read-only room"));
        
+               wprintf("\n<LI><INPUT TYPE=\"checkbox\" NAME=\"collabdel\" VALUE=\"yes\" ");
+               if (er_flags2 & QR2_COLLABDEL)
+                       wprintf("CHECKED ");
+               wprintf("> ");
+               wprintf(_("All users allowed to post may also delete messages"));
+       
                /** directory stuff */
                wprintf("\n<LI><INPUT TYPE=\"checkbox\" NAME=\"directory\" VALUE=\"yes\" ");
                if (er_flags & QR_DIRECTORY)
@@ -1702,6 +1711,9 @@ void editroom(void)
        char er_roomaide[26];
        int er_floor;
        unsigned er_flags;
+       int er_listingorder;
+       int er_defaultview;
+       unsigned er_flags2;
        int bump;
 
 
@@ -1723,6 +1735,9 @@ void editroom(void)
        extract_token(er_password, &buf[4], 1, '|', sizeof er_password);
        extract_token(er_dirname, &buf[4], 2, '|', sizeof er_dirname);
        er_flags = extract_int(&buf[4], 3);
+       er_listingorder = extract_int(&buf[4], 5);
+       er_defaultview = extract_int(&buf[4], 6);
+       er_flags2 = extract_int(&buf[4], 7);
 
        strcpy(er_roomaide, bstr("er_roomaide"));
        if (strlen(er_roomaide) == 0) {
@@ -1774,6 +1789,12 @@ void editroom(void)
                er_flags &= ~QR_READONLY;
        }
 
+       if (!strcmp(bstr("collabdel"), "yes")) {
+               er_flags2 |= QR2_COLLABDEL;
+       } else {
+               er_flags2 &= ~QR2_COLLABDEL;
+       }
+
        if (!strcmp(bstr("permanent"), "yes")) {
                er_flags |= QR_PERMANENT;
        } else {
@@ -1824,8 +1845,9 @@ void editroom(void)
 
        er_floor = atoi(bstr("er_floor"));
 
-       sprintf(buf, "SETR %s|%s|%s|%u|%d|%d",
-            er_name, er_password, er_dirname, er_flags, bump, er_floor);
+       sprintf(buf, "SETR %s|%s|%s|%u|%d|%d|%d|%d|%u",
+               er_name, er_password, er_dirname, er_flags, bump, er_floor,
+               er_listingorder, er_defaultview, er_flags2);
        serv_puts(buf);
        serv_getln(buf, sizeof buf);
        if (buf[0] != '2') {
index 85fe7b30d04ce954979c4b5833ab691184e8b91c..37a401f8e1404a3c5e3c8fc2e3170a2cc3c9606f 100644 (file)
@@ -122,11 +122,11 @@ extern locale_t wc_locales[];
 #define SLEEPING               180             /* TCP connection timeout */
 #define WEBCIT_TIMEOUT         900             /* WebCit session timeout */
 #define PORT_NUM               2000            /* port number to listen on */
-#define SERVER                 "WebCit v7.06"  /* who's in da house */
+#define SERVER                 "WebCit v7.07"  /* who's in da house */
 #define DEVELOPER_ID           0
 #define CLIENT_ID              4
-#define CLIENT_VERSION         706             /* This version of WebCit */
-#define MINIMUM_CIT_VERSION    705             /* min required Citadel ver. */
+#define CLIENT_VERSION         707             /* This version of WebCit */
+#define MINIMUM_CIT_VERSION    707             /* min required Citadel ver. */
 #define DEFAULT_HOST           "localhost"     /* Default Citadel server */
 #define DEFAULT_PORT           "504"
 #define LB                     (1)             /* Internal escape chars */
@@ -168,6 +168,7 @@ extern locale_t wc_locales[];
  */
 #define QR2_SYSTEM     1               /**< System room; hide by default       */
 #define QR2_SELFLIST   2               /**< Self-service mailing list mgmt     */
+#define QR2_COLLABDEL  4               /**< Anyone who can post can also delete*/
 
 /**
  * user/room access
@@ -338,6 +339,7 @@ struct wcsession {
        int serv_sock;                          /**< Client socket to Citadel server */
        int chat_sock;                          /**< Client socket to Citadel server - for chat */
        unsigned room_flags;                    /**< flags associated with the current room */
+       unsigned room_flags2;                   /**< flags associated with the current room */
        int wc_view;                            /**< view for the current room */
        int wc_default_view;                    /**< default view for the current room */
        int wc_is_trash;                        /**< nonzero == current room is a Trash folder */