X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Froom_ops.c;h=1e4209bdc6867bccc3a8b9e10ed9b1d15d2bb99b;hb=65a49d0eab7a8ae01de45495fdfdf67bdd8bd189;hp=408196c91873395d01406c872690d910b44a31df;hpb=d2fbe9d0eeadfaa1054e959031d6859164dfa78e;p=citadel.git diff --git a/citadel/room_ops.c b/citadel/room_ops.c index 408196c91..1e4209bdc 100644 --- a/citadel/room_ops.c +++ b/citadel/room_ops.c @@ -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 0L) ++total_messages; } - new_messages = num_msgs; + num_sets = num_tokens(vbuf.v_seen, ','); for (s=0; scurr_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");