a8697dd9ffb48a0ed78b2f4175b896e0fe81746e
[NeonServV5.git] / src / cmd_neonserv_setrank.c
1 /* cmd_neonserv_setrank.c - NeonServ v5.1
2  * Copyright (C) 2011  Philipp Kreil (pk910)
3  * 
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * 
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  * 
14  * You should have received a copy of the GNU General Public License 
15  * along with this program. If not, see <http://www.gnu.org/licenses/>. 
16  */
17
18 #include "cmd_neonserv.h"
19
20 /*
21 * argv[0]   rank id
22 * argv[1]   setting
23 * argv[2-*] value
24 */
25
26 static void neonserv_cmd_setrank_name(struct UserNode *user, int rank_id, char *current, char *value);
27 static void neonserv_cmd_setrank_info(struct UserNode *user, int rank_id, char *current, char *value);
28 static void neonserv_cmd_setrank_access(struct UserNode *user, int rank_id, char *current, char *value);
29 static void neonserv_cmd_setrank_order(struct UserNode *user, int rank_id, char *current, char *value);
30
31 CMD_BIND(neonserv_cmd_setrank) {
32     MYSQL_RES *res;
33     MYSQL_ROW row;
34     printf_mysql_query("SELECT `rank_id`, `rank_name`, `rank_info`, `rank_access`, `rank_order` FROM `support_ranks` WHERE `rank_id` = '%s'", escape_string(argv[0]));
35     res = mysql_use();
36     if ((row = mysql_fetch_row(res)) == NULL) {
37         reply(getTextBot(), user, "NS_SETRANK_NOT_FOUND", argv[0]);
38         return;
39     }
40     if(argc < 2) {
41         reply(getTextBot(), user, "NS_SETRANK_HEAD", row[0]);
42         reply(getTextBot(), user, "\002NAME   \002 %s", row[1]);
43         reply(getTextBot(), user, "\002INFO   \002 %s", row[2]);
44         reply(getTextBot(), user, "\002ACCESS \002 %s", row[3]);
45         reply(getTextBot(), user, "\002ORDER  \002 %s", row[4]);
46     } else {
47         char *value = NULL;
48         if(argc > 2) {
49             value = merge_argv(argv, 2, argc);
50         }
51         if(!stricmp(argv[1], "name"))
52             neonserv_cmd_setrank_name(user, atoi(row[0]), row[1], value);
53         else if(!stricmp(argv[1], "info"))
54             neonserv_cmd_setrank_info(user, atoi(row[0]), row[2], value);
55         else if(!stricmp(argv[1], "access"))
56             neonserv_cmd_setrank_access(user, atoi(row[0]), row[3], value);
57         else if(!stricmp(argv[1], "order"))
58             neonserv_cmd_setrank_order(user, atoi(row[0]), row[4], value);
59         else
60             reply(getTextBot(), user, "NS_SETRANK_UNKNOWN_SETTING", row[1]);
61     }
62 }
63
64 static void neonserv_cmd_setrank_name(struct UserNode *user, int rank_id, char *current, char *value) {
65     if(value && stricmp(value, current)) {
66         MYSQL_RES *res;
67         MYSQL_ROW row;
68         printf_mysql_query("SELECT `rank_id` FROM `support_ranks` WHERE `rank_name` = '%s'", escape_string(value));
69         res = mysql_use();
70         if ((row = mysql_fetch_row(res)) != NULL) {
71             reply(getTextBot(), user, "NS_ADDRANK_EXISTS", value);
72             return;
73         }
74         printf_mysql_query("UPDATE `support_ranks` SET `rank_name` = '%s' WHERE `rank_id` = '%d'", escape_string(value), rank_id);
75         current = value;
76     }
77     reply(getTextBot(), user, "\002NAME\002 %s", current);
78 }
79
80 static void neonserv_cmd_setrank_info(struct UserNode *user, int rank_id, char *current, char *value) {
81     if(value && stricmp(value, current)) {
82         printf_mysql_query("UPDATE `support_ranks` SET `rank_info` = '%s' WHERE `rank_id` = '%d'", escape_string(value), rank_id);
83         current = value;
84     }
85     reply(getTextBot(), user, "\002INFO\002 %s", current);
86 }
87
88 static void neonserv_cmd_setrank_access(struct UserNode *user, int rank_id, char *current, char *value) {
89     if(value && stricmp(value, current)) {
90         int new_access = atoi(value);
91         if(new_access <= 0 || new_access > 1000) {
92             reply(getTextBot(), user, "NS_INVALID_ACCESS", new_access);
93             return;
94         }
95         printf_mysql_query("UPDATE `users` SET `user_access` = '%d' WHERE `user_rank` = '%d'", new_access, rank_id);
96         printf_mysql_query("UPDATE `support_ranks` SET `rank_access` = '%d' WHERE `rank_id` = '%d'", new_access, rank_id);
97         current = value;
98     }
99     reply(getTextBot(), user, "\002ACCESS\002 %s", current);
100 }
101
102 static void neonserv_cmd_setrank_order(struct UserNode *user, int rank_id, char *current, char *value) {
103     if(value && stricmp(value, current)) {
104         int new_order = atoi(value);
105         if(new_order <= 0 || new_order > 99) {
106             reply(getTextBot(), user, "NS_SETRANK_ORDER_INVALID", new_order);
107             return;
108         }
109         printf_mysql_query("UPDATE `support_ranks` SET `rank_order` = '%d' WHERE `rank_id` = '%d'", new_order, rank_id);
110         current = value;
111     }
112     reply(getTextBot(), user, "\002ORDER\002 %s", current);
113 }