Changing the name of the 'Aide' access level to 'Admin'
[citadel.git] / citadel / room_ops.c
index 408196c91873395d01406c872690d910b44a31df..1e4209bdc6867bccc3a8b9e10ed9b1d15d2bb99b 100644 (file)
@@ -1,21 +1,15 @@
 /* 
  * Server functions which perform operations on room objects.
  *
- * Copyright (c) 1987-2011 by the citadel.org team
+ * Copyright (c) 1987-2012 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 as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU General Public License, version 3.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 
 #include "sysdep.h"
@@ -261,6 +255,7 @@ SKIP_EVERYTHING:
        if (view != NULL) *view = vbuf.v_view;
 }
 
+
 /*
  * Self-checking stuff for a room record read into memory
  */
@@ -362,13 +357,10 @@ void b_putroom(struct ctdlroom *qrbuf, char *room_name)
 
        len = bptr - lowercase_name;
        if (qrbuf == NULL) {
-               cdb_delete(CDB_ROOMS,
-                          lowercase_name, len);
+               cdb_delete(CDB_ROOMS, lowercase_name, len);
        } else {
                time(&qrbuf->QRmtime);
-               cdb_store(CDB_ROOMS,
-                         lowercase_name, len,
-                         qrbuf, sizeof(struct ctdlroom));
+               cdb_store(CDB_ROOMS, lowercase_name, len, qrbuf, sizeof(struct ctdlroom));
        }
 }
 
@@ -389,7 +381,6 @@ void b_deleteroom(char *room_name) {
 }
 
 
-
 /*
  * CtdlPutRoomLock()  -  same as CtdlPutRoom() but unlocks the record (if supported)
  */
@@ -401,8 +392,6 @@ void CtdlPutRoomLock(struct ctdlroom *qrbuf)
 
 }
 
-/****************************************************************************/
-
 
 /*
  * CtdlGetFloorByName()  -  retrieve the number of the named floor
@@ -426,7 +415,6 @@ int CtdlGetFloorByName(const char *floor_name)
 }
 
 
-
 /*
  * CtdlGetFloorByNameLock()  -  retrieve floor number for given floor and lock the floor list.
  */
@@ -484,6 +472,7 @@ void CtdlGetFloor(struct floor *flbuf, int floor_num)
 
 }
 
+
 /*
  * lgetfloor()  -  same as CtdlGetFloor() but locks the record (if supported)
  */
@@ -533,7 +522,6 @@ struct floor *CtdlGetCachedFloor(int floor_num) {
 }
 
 
-
 /*
  * CtdlPutFloor()  -  store floor data on disk
  */
@@ -553,7 +541,6 @@ void CtdlPutFloor(struct floor *flbuf, int floor_num)
 }
 
 
-
 /*
  * CtdlPutFloorLock()  -  same as CtdlPutFloor() but unlocks the record (if supported)
  */
@@ -566,7 +553,6 @@ void CtdlPutFloorLock(struct floor *flbuf, int floor_num)
 }
 
 
-
 /*
  * lputfloor()  -  same as CtdlPutFloor() but unlocks the record (if supported)
  */
@@ -591,11 +577,13 @@ void CtdlForEachRoom(void (*CallBack) (struct ctdlroom *EachRoom, void *out_data
                memset(&qrbuf, 0, sizeof(struct ctdlroom));
                memcpy(&qrbuf, cdbqr->ptr,
                       ((cdbqr->len > sizeof(struct ctdlroom)) ?
-                       sizeof(struct ctdlroom) : cdbqr->len));
+                       sizeof(struct ctdlroom) : cdbqr->len)
+               );
                cdb_free(cdbqr);
                room_sanity_check(&qrbuf);
-               if (qrbuf.QRflags & QR_INUSE)
+               if (qrbuf.QRflags & QR_INUSE) {
                        (*CallBack)(&qrbuf, in_data);
+               }
        }
 }
 
@@ -608,7 +596,7 @@ void delete_msglist(struct ctdlroom *whichroom)
         struct cdbdata *cdbml;
 
        /* Make sure the msglist we're deleting actually exists, otherwise
-        * gdbm will complain when we try to delete an invalid record
+        * libdb will complain when we try to delete an invalid record
         */
         cdbml = cdb_fetch(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long));
         if (cdbml != NULL) {
@@ -620,7 +608,6 @@ void delete_msglist(struct ctdlroom *whichroom)
 }
 
 
-
 /*
  * Message pointer compare function for sort_msglist()
  */
@@ -649,8 +636,7 @@ int sort_msglist(long listptrs[], int oldcount)
 
        /* and yank any nulls */
        while ((numitems > 0) && (listptrs[0] == 0L)) {
-               memmove(&listptrs[0], &listptrs[1],
-                      (sizeof(long) * (numitems - 1)));
+               memmove(&listptrs[0], &listptrs[1], (sizeof(long) * (numitems - 1)));
                --numitems;
        }
 
@@ -674,7 +660,6 @@ int CtdlIsNonEditable(struct ctdlroom *qrbuf)
 }
 
 
-
 /*
  * Back-back-end for all room listing commands
  */
@@ -994,7 +979,7 @@ void CtdlUserGoto(char *where, int display_result, int transiently,
        for (a=0; a<num_msgs; ++a) {
                if (msglist[a] > 0L) ++total_messages;
        }
-       new_messages = num_msgs;
+
        num_sets = num_tokens(vbuf.v_seen, ',');
        for (s=0; s<num_sets; ++s) {
                extract_token(setstr, vbuf.v_seen, s, ',', sizeof setstr);
@@ -1054,7 +1039,7 @@ void CtdlUserGoto(char *where, int display_result, int transiently,
        CCC->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|%d|%d|\n",
+               cprintf("%d%c%s|%d|%d|%d|%d|%ld|%ld|%d|%d|%d|%d|%d|%d|%d|%d|%ld|\n",
                        CIT_OK, CtdlCheckExpress(),
                        truncated_roomname,
                        (int)new_messages,
@@ -1070,7 +1055,8 @@ void CtdlUserGoto(char *where, int display_result, int transiently,
                        (int)vbuf.v_view,
                        (int)CCC->room.QRdefaultview,
                        (int)is_trash,
-                       (int)CCC->room.QRflags2
+                       (int)CCC->room.QRflags2,
+                       (long)CCC->room.QRmtime
                );
        }
 }
@@ -1321,7 +1307,7 @@ void cmd_rdir(char *cmdbuf)
 }
 
 /*
- * get room parameters (aide or room aide command)
+ * get room parameters (admin or room admin command)
  */
 void cmd_getr(char *cmdbuf)
 {
@@ -1473,7 +1459,7 @@ int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) {
 
 
 /*
- * set room parameters (aide or room aide command)
+ * set room parameters (admin or room admin command)
  */
 void cmd_setr(char *args)
 {
@@ -1619,7 +1605,7 @@ void cmd_setr(char *args)
 
 
 /* 
- * get the name of the room aide for this room
+ * get the name of the room admin for this room
  */
 void cmd_geta(char *cmdbuf)
 {
@@ -1636,7 +1622,7 @@ void cmd_geta(char *cmdbuf)
 
 
 /* 
- * set the room aide for this room
+ * set the room admin for this room
  */
 void cmd_seta(char *new_ra)
 {
@@ -1668,13 +1654,13 @@ void cmd_seta(char *new_ra)
        if (post_notice == 1) {
                if (!IsEmptyStr(usbuf.fullname))
                        snprintf(buf, sizeof buf,
-                               "%s is now the room aide for \"%s\".\n",
+                               "%s is now the room admin 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 admin for \"%s\".\n",
                                CC->room.QRname);
-               CtdlAideMessage(buf, "Aide Room Modification");
+               CtdlAideMessage(buf, "Admin Room Modification");
        }
        cprintf("%d Ok\n", CIT_OK);
 }
@@ -1820,13 +1806,13 @@ int CtdlDoIHavePermissionToDeleteThisRoom(struct ctdlroom *qr) {
        }
 
        /*
-        * For normal rooms, just check for aide or room aide status.
+        * For normal rooms, just check for admin or room admin status.
         */
        return(is_room_aide());
 }
 
 /*
- * aide command: kill the current room
+ * admin command: kill the current room
  */
 void cmd_kill(char *argbuf)
 {
@@ -1919,18 +1905,18 @@ unsigned CtdlCreateRoom(char *new_room_name,
        }
 
        /* If the room is private, and the system administrator has elected
-        * to automatically grant room aide privileges, do so now.
+        * to automatically grant room admin privileges, do so now.
         */
        if ((qrbuf.QRflags & QR_PRIVATE) && (CREATAIDE == 1)) {
                qrbuf.QRroomaide = CC->user.usernum;
        }
-       /* Blog owners automatically become room aides of their blogs.
+       /* Blog owners automatically become room admins of their blogs.
         * (In the future we will offer a site-wide configuration setting to suppress this behavior.)
         */
        else if (new_room_view == VIEW_BLOG) {
                qrbuf.QRroomaide = CC->user.usernum;
        }
-       /* Otherwise, set the room aide to undefined.
+       /* Otherwise, set the room admin to undefined.
         */
        else {
                qrbuf.QRroomaide = (-1L);
@@ -2292,6 +2278,19 @@ void cmd_eflr(char *argbuf)
 }
 
 
+
+/* 
+ * cmd_stat()  -  return the modification time of the current room (maybe other things in the future)
+ */
+void cmd_stat(char *gargs)
+{
+       if (CtdlAccessCheck(ac_logged_in_or_guest)) return;
+       CtdlGetRoom(&CC->room, CC->room.QRname);
+       cprintf("%d %s|%ld|\n", CIT_OK, CC->room.QRname, CC->room.QRmtime);
+}
+
+
+
 /*****************************************************************************/
 /*                      MODULE INITIALIZATION STUFF                          */
 /*****************************************************************************/
@@ -2306,12 +2305,13 @@ CTDL_MODULE_INIT(room_ops)
                CtdlRegisterProtoHook(cmd_lzrm, "LZRM", "List zapped rooms");
                CtdlRegisterProtoHook(cmd_lprm, "LPRM", "List public rooms");
                CtdlRegisterProtoHook(cmd_goto, "GOTO", "Goto a named room");
+               CtdlRegisterProtoHook(cmd_stat, "STAT", "Get mtime of the current room");
                CtdlRegisterProtoHook(cmd_whok, "WHOK", "List users who know this room");
                CtdlRegisterProtoHook(cmd_rdir, "RDIR", "List files in room directory");
                CtdlRegisterProtoHook(cmd_getr, "GETR", "Get room parameters");
                CtdlRegisterProtoHook(cmd_setr, "SETR", "Set room parameters");
-               CtdlRegisterProtoHook(cmd_geta, "GETA", "Get the room aide name");
-               CtdlRegisterProtoHook(cmd_seta, "SETA", "Set the room aide for this room");
+               CtdlRegisterProtoHook(cmd_geta, "GETA", "Get the room admin name");
+               CtdlRegisterProtoHook(cmd_seta, "SETA", "Set the room admin for this room");
                CtdlRegisterProtoHook(cmd_rinf, "RINF", "Fetch room info file");
                CtdlRegisterProtoHook(cmd_kill, "KILL", "Kill (delete) the current room");
                CtdlRegisterProtoHook(cmd_cre8, "CRE8", "Create a new room");