867584a0683e22c9e0daaa36fab9ef977aacd2ac
[citadel.git] / citadel / serv_moderate.c
1 /*
2  * $Id$
3  *
4  * Server-side functions which handle message moderation.
5  *
6  */
7
8 #include "sysdep.h"
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <stdio.h>
12 #include <fcntl.h>
13 #include <signal.h>
14 #include <pwd.h>
15 #include <errno.h>
16 #include <sys/types.h>
17 #include <sys/time.h>
18 #include <sys/wait.h>
19 #include <string.h>
20 #include <limits.h>
21 #include "citadel.h"
22 #include "server.h"
23 #include <time.h>
24 #include "sysdep_decls.h"
25 #include "citserver.h"
26 #include "support.h"
27 #include "config.h"
28 #include "control.h"
29 #include "dynloader.h"
30 #include "room_ops.h"
31 #include "user_ops.h"
32 #include "policy.h"
33 #include "database.h"
34 #include "msgbase.h"
35 #include "tools.h"
36
37
38
39 /*
40  * moderate a message
41  */
42 void cmd_mmod(char *argbuf) {
43         long msgnum;
44         int newlevel;
45         struct SuppMsgInfo smi;
46         int is_message_in_room;
47
48         /* user must be at least a Room Aide to moderate */
49         if (CtdlAccessCheck(ac_room_aide)) return;
50
51         msgnum = extract_long(argbuf, 0);
52         newlevel = extract_int(argbuf, 1);
53
54         if ( (newlevel < (-63)) || (newlevel > (+63)) ) {
55                 cprintf("%d %d is not a valid moderation level.\n",
56                         ERROR+ILLEGAL_VALUE, newlevel);
57                 return;
58         }
59
60         is_message_in_room = CtdlForEachMessage(MSGS_EQ, msgnum, (-127),
61                                 NULL, NULL, NULL, NULL);
62         if (!is_message_in_room) {
63                 cprintf("%d Message %ld is not in this room.\n",
64                         ERROR+ILLEGAL_VALUE, msgnum);
65                 return;
66         }
67
68         GetSuppMsgInfo(&smi, msgnum);
69         smi.smi_mod = newlevel;
70         PutSuppMsgInfo(&smi);
71
72         cprintf("%d Message %ld is moderated to %d\n", OK, msgnum, newlevel);
73 }
74
75
76 char *Dynamic_Module_Init(void)
77 {
78         CtdlRegisterProtoHook(cmd_mmod, "MMOD", "Moderate a message");
79         return "$Id$";
80 }