/*
* 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"
if (view != NULL) *view = vbuf.v_view;
}
+
/*
* Self-checking stuff for a room record read into memory
*/
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));
}
}
}
-
/*
* CtdlPutRoomLock() - same as CtdlPutRoom() but unlocks the record (if supported)
*/
}
-/****************************************************************************/
-
/*
* CtdlGetFloorByName() - retrieve the number of the named floor
}
-
/*
* CtdlGetFloorByNameLock() - retrieve floor number for given floor and lock the floor list.
*/
}
+
/*
* lgetfloor() - same as CtdlGetFloor() but locks the record (if supported)
*/
}
-
/*
* CtdlPutFloor() - store floor data on disk
*/
}
-
/*
* CtdlPutFloorLock() - same as CtdlPutFloor() but unlocks the record (if supported)
*/
}
-
/*
* lputfloor() - same as CtdlPutFloor() but unlocks the record (if supported)
*/
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);
+ }
}
}
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) {
}
-
/*
* Message pointer compare function for sort_msglist()
*/
/* 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;
}
}
-
/*
* Back-back-end for all room listing commands
*/
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,
(int)vbuf.v_view,
(int)CCC->room.QRdefaultview,
(int)is_trash,
- (int)CCC->room.QRflags2
+ (int)CCC->room.QRflags2,
+ (long)CCC->room.QRmtime
);
}
}
}
/*
- * get room parameters (aide or room aide command)
+ * get room parameters (admin or room admin command)
*/
void cmd_getr(char *cmdbuf)
{
/*
- * set room parameters (aide or room aide command)
+ * set room parameters (admin or room admin command)
*/
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)
{
/*
- * set the room aide for this room
+ * set the room admin for this room
*/
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);
}
}
/*
- * 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)
{
}
/* 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);
}
+
+/*
+ * 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 */
/*****************************************************************************/
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");