]> code.citadel.org Git - citadel.git/blobdiff - citadel/room_ops.c
calculate the directories in a central manner.
[citadel.git] / citadel / room_ops.c
index 46490bd9dd0702c783681ec3f83aff7cc3746e91..ea4fc1a0808f8ab3e2c9700c4a9a74c0e606c2c2 100644 (file)
@@ -5,10 +5,6 @@
  *
  */
 
-#ifdef DLL_EXPORT
-#define IN_LIBCIT
-#endif
-
 #include "sysdep.h"
 #include <stdlib.h>
 #include <unistd.h>
@@ -782,6 +778,7 @@ void usergoto(char *where, int display_result, int transiently,
        int s;
        char setstr[128], lostr[64], histr[64];
        long lo, hi;
+       int is_trash = 0;
 
        /* If the supplied room name is NULL, the caller wants us to know that
         * it has already copied the room record into CC->room, so
@@ -880,6 +877,10 @@ void usergoto(char *where, int display_result, int transiently,
                safestrncpy(truncated_roomname, &truncated_roomname[11], sizeof truncated_roomname);
        }
 
+       if (!strcasecmp(truncated_roomname, USERTRASHROOM)) {
+               is_trash = 1;
+       }
+
        if (retmsgs != NULL) *retmsgs = total_messages;
        if (retnew != NULL) *retnew = new_messages;
        lprintf(CTDL_DEBUG, "<%s> %d new of %d total messages\n",
@@ -890,7 +891,7 @@ void usergoto(char *where, int display_result, int transiently,
        CC->curr_view = (int)vbuf.v_view;
 
        if (display_result) {
-               cprintf("%d%c%s|%d|%d|%d|%d|%ld|%ld|%d|%d|%d|%d|%d|%d|\n",
+               cprintf("%d%c%s|%d|%d|%d|%d|%ld|%ld|%d|%d|%d|%d|%d|%d|%d|\n",
                        CIT_OK, CtdlCheckExpress(),
                        truncated_roomname,
                        (int)new_messages,
@@ -904,12 +905,44 @@ void usergoto(char *where, int display_result, int transiently,
                        (int)newmailcount,
                        (int)CC->room.QRfloor,
                        (int)vbuf.v_view,
-                       (int)CC->room.QRdefaultview
+                       (int)CC->room.QRdefaultview,
+                       (int)is_trash
                );
        }
 }
 
 
+/*
+ * Handle some of the macro named rooms
+ */
+void convert_room_name_macros(char *towhere, size_t maxlen) {
+       if (!strcasecmp(towhere, "_BASEROOM_")) {
+               safestrncpy(towhere, config.c_baseroom, maxlen);
+       }
+       else if (!strcasecmp(towhere, "_MAIL_")) {
+               safestrncpy(towhere, MAILROOM, maxlen);
+       }
+       else if (!strcasecmp(towhere, "_TRASH_")) {
+               safestrncpy(towhere, USERTRASHROOM, maxlen);
+       }
+       else if (!strcasecmp(towhere, "_BITBUCKET_")) {
+               safestrncpy(towhere, config.c_twitroom, maxlen);
+       }
+       else if (!strcasecmp(towhere, "_CALENDAR_")) {
+               safestrncpy(towhere, USERCALENDARROOM, maxlen);
+       }
+       else if (!strcasecmp(towhere, "_TASKS_")) {
+               safestrncpy(towhere, USERTASKSROOM, maxlen);
+       }
+       else if (!strcasecmp(towhere, "_CONTACTS_")) {
+               safestrncpy(towhere, USERCONTACTSROOM, maxlen);
+       }
+       else if (!strcasecmp(towhere, "_NOTES_")) {
+               safestrncpy(towhere, USERNOTESROOM, maxlen);
+       }
+}
+
+
 /* 
  * cmd_goto()  -  goto a new room
  */
@@ -935,30 +968,7 @@ void cmd_goto(char *gargs)
        /*
         * Handle some of the macro named rooms
         */
-       if (!strcasecmp(towhere, "_BASEROOM_")) {
-               safestrncpy(towhere, config.c_baseroom, sizeof towhere);
-       }
-       else if (!strcasecmp(towhere, "_MAIL_")) {
-               safestrncpy(towhere, MAILROOM, sizeof towhere);
-       }
-       else if (!strcasecmp(towhere, "_TRASH_")) {
-               safestrncpy(towhere, USERTRASHROOM, sizeof towhere);
-       }
-       else if (!strcasecmp(towhere, "_BITBUCKET_")) {
-               safestrncpy(towhere, config.c_twitroom, sizeof towhere);
-       }
-       else if (!strcasecmp(towhere, "_CALENDAR_")) {
-               safestrncpy(towhere, USERCALENDARROOM, sizeof towhere);
-       }
-       else if (!strcasecmp(towhere, "_TASKS_")) {
-               safestrncpy(towhere, USERTASKSROOM, sizeof towhere);
-       }
-       else if (!strcasecmp(towhere, "_CONTACTS_")) {
-               safestrncpy(towhere, USERCONTACTSROOM, sizeof towhere);
-       }
-       else if (!strcasecmp(towhere, "_NOTES_")) {
-               safestrncpy(towhere, USERNOTESROOM, sizeof towhere);
-       }
+       convert_room_name_macros(towhere, sizeof towhere);
 
        /* First try a regular match */
        c = getroom(&QRscratch, towhere);
@@ -1079,7 +1089,7 @@ void cmd_rdir(void)
        char tempfilename[PATH_MAX];
 
        if (CtdlAccessCheck(ac_logged_in)) return;
-       tmpnam(tempfilename);
+       CtdlMakeTempFileName(tempfilename, sizeof tempfilename);
        
        getroom(&CC->room, CC->room.QRname);
        getuser(&CC->user, CC->curr_user);
@@ -1094,32 +1104,23 @@ void cmd_rdir(void)
                cprintf("%d not here.\n", ERROR + HIGHER_ACCESS_REQUIRED);
                return;
        }
-       cprintf("%d %s|"
-#ifndef HAVE_DATA_DIR
-                       "."
-#else
-                       DATA_DIR
-#endif
-                       "/files/%s\n",
-                       LISTING_FOLLOWS, config.c_fqdn, CC->room.QRdirname);
+       cprintf("%d %s|%s/%s\n",
+                       LISTING_FOLLOWS, 
+                       config.c_fqdn,
+                       ctdl_file_dir, 
+                       CC->room.QRdirname);
 
-       snprintf(buf, sizeof buf, "ls "
-#ifndef HAVE_DATA_DIR
-                        "."
-#else
-                        DATA_DIR
-#endif
-                        "/files/%s  >%s 2> /dev/null",
-                        CC->room.QRdirname, tempfilename);
+       snprintf(buf, sizeof buf, 
+                        "ls %s/%s >%s 2>/dev/null",
+                        ctdl_file_dir,
+                        CC->room.QRdirname, 
+                        tempfilename);
        system(buf);
 
        snprintf(buf, sizeof buf, 
-#ifndef HAVE_DATA_DIR
-                        "."
-#else
-                        DATA_DIR
-#endif
-                        "/files/%s/filedir", CC->room.QRdirname);
+                        "%s/%s/filedir",
+                        ctdl_file_dir,
+                        CC->room.QRdirname);
        fd = fopen(buf, "r");
        if (fd == NULL)
                fd = fopen("/dev/null", "r");
@@ -1129,13 +1130,10 @@ void cmd_rdir(void)
                flnm[strlen(flnm) - 1] = 0;
                if (strcasecmp(flnm, "filedir")) {
                        snprintf(buf, sizeof buf, 
-#ifndef HAVE_DATA_DIR
-                                        "."
-#else
-                                        DATA_DIR
-#endif
-                                        "/files/%s/%s",
-                                        CC->room.QRdirname, flnm);
+                                        "%s/%s/%s",
+                                        ctdl_file_dir,
+                                        CC->room.QRdirname,
+                                        flnm);
                        stat(buf, &statbuf);
                        safestrncpy(comment, "", sizeof comment);
                        fseek(fd, 0L, 0);
@@ -1441,16 +1439,13 @@ void cmd_setr(char *args)
 
        /* Create a room directory if necessary */
        if (CC->room.QRflags & QR_DIRECTORY) {
-               snprintf(buf, sizeof buf, 
-#ifndef HAVE_DATA_DIR
-                                "."
-#else
-                                DATA_DIR
-#endif
-                                "/files/%s", CC->room.QRdirname);
+               snprintf(buf, sizeof buf,"%s/%s",
+                                ctdl_file_dir,
+                                CC->room.QRdirname);
                mkdir(buf, 0755);
        }
-       snprintf(buf, sizeof buf, "%s> edited by %s\n", CC->room.QRname, CC->curr_user);
+       snprintf(buf, sizeof buf, "The room \"%s\" has been edited by %s.\n",
+               CC->room.QRname, CC->curr_user);
        aide_message(buf);
        cprintf("%d Ok\n", CIT_OK);
 }
@@ -1507,11 +1502,11 @@ void cmd_seta(char *new_ra)
        if (post_notice == 1) {
                if (strlen(usbuf.fullname) > 0)
                        snprintf(buf, sizeof buf,
-                               "%s is now room aide for %s>\n",
+                               "%s is now the room aide for \"%s\".\n",
                                usbuf.fullname, CC->room.QRname);
                else
                        snprintf(buf, sizeof buf,
-                               "There is now no room aide for %s>\n",
+                               "There is now no room aide for \"%s\".\n",
                                CC->room.QRname);
                aide_message(buf);
        }
@@ -1702,7 +1697,7 @@ void cmd_kill(char *argbuf)
                usergoto(config.c_baseroom, 0, 0, NULL, NULL);
 
                /* tell the world what we did */
-               snprintf(msg, sizeof msg, "%s> killed by %s\n",
+               snprintf(msg, sizeof msg, "The room \"%s\" has been deleted by %s.\n",
                         deleted_room_name, CC->curr_user);
                aide_message(msg);
                cprintf("%d '%s' deleted.\n", CIT_OK, deleted_room_name);
@@ -1794,13 +1789,11 @@ unsigned create_room(char *new_room_name,
        /* Grant the creator access to the room unless the avoid_access
         * parameter was specified.
         */
-       if (avoid_access == 0) {
-               lgetuser(&CC->user, CC->curr_user);
+       if ( (CC->logged_in) && (avoid_access == 0) ) {
                CtdlGetRelationship(&vbuf, &CC->user, &qrbuf);
                vbuf.v_flags = vbuf.v_flags & ~V_FORGET & ~V_LOCKOUT;
                vbuf.v_flags = vbuf.v_flags | V_ACCESS;
                CtdlSetRelationship(&vbuf, &CC->user, &qrbuf);
-               lputuser(&CC->user);
        }
 
        /* resume our happy day */
@@ -1911,7 +1904,7 @@ void cmd_cre8(char *args)
        /* post a message in Aide> describing the new room */
        notification_message = malloc(1024);
        snprintf(notification_message, 1024,
-               "%s> created by %s%s%s%s%s%s\n",
+               "A new room called \"%s\" has been created by %s%s%s%s%s%s\n",
                new_room_name,
                CC->user.fullname,
                ((newflags & QR_MAILBOX) ? " [personal]" : ""),