e56feb94586155152b8a9dbf3f9401d10814942f
[NeonServV5.git] / src / cmd_neonserv_setrank.c
1
2 #include "cmd_neonserv.h"
3
4 /*
5 * argv[0]   rank id
6 * argv[1]   setting
7 * argv[2-*] value
8 */
9
10 static void neonserv_cmd_setrank_name(struct UserNode *user, int rank_id, char *current, char *value);
11 static void neonserv_cmd_setrank_info(struct UserNode *user, int rank_id, char *current, char *value);
12 static void neonserv_cmd_setrank_access(struct UserNode *user, int rank_id, char *current, char *value);
13 static void neonserv_cmd_setrank_order(struct UserNode *user, int rank_id, char *current, char *value);
14
15 CMD_BIND(neonserv_cmd_setrank) {
16     MYSQL_RES *res;
17     MYSQL_ROW row;
18     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]));
19     res = mysql_use();
20     if ((row = mysql_fetch_row(res)) == NULL) {
21         reply(getTextBot(), user, "NS_SETRANK_NOT_FOUND", argv[0]);
22         return;
23     }
24     if(argc < 2) {
25         reply(getTextBot(), user, "NS_SETRANK_HEAD", row[0]);
26         reply(getTextBot(), user, "\002NAME   \002 %s", row[1]);
27         reply(getTextBot(), user, "\002INFO   \002 %s", row[2]);
28         reply(getTextBot(), user, "\002ACCESS \002 %s", row[3]);
29         reply(getTextBot(), user, "\002ORDER  \002 %s", row[4]);
30     } else {
31         char *value = NULL;
32         if(argc > 2) {
33             value = merge_argv(argv, 2, argc);
34         }
35         if(!stricmp(argv[1], "name"))
36             neonserv_cmd_setrank_name(user, atoi(row[0]), row[1], value);
37         else if(!stricmp(argv[1], "info"))
38             neonserv_cmd_setrank_info(user, atoi(row[0]), row[2], value);
39         else if(!stricmp(argv[1], "access"))
40             neonserv_cmd_setrank_access(user, atoi(row[0]), row[3], value);
41         else if(!stricmp(argv[1], "order"))
42             neonserv_cmd_setrank_order(user, atoi(row[0]), row[4], value);
43         else
44             reply(getTextBot(), user, "NS_SETRANK_UNKNOWN_SETTING", row[1]);
45     }
46 }
47
48 static void neonserv_cmd_setrank_name(struct UserNode *user, int rank_id, char *current, char *value) {
49     if(value && stricmp(value, current)) {
50         MYSQL_RES *res;
51         MYSQL_ROW row;
52         printf_mysql_query("SELECT `rank_id` FROM `support_ranks` WHERE `rank_name` = '%s'", escape_string(value));
53         res = mysql_use();
54         if ((row = mysql_fetch_row(res)) != NULL) {
55             reply(getTextBot(), user, "NS_ADDRANK_EXISTS", value);
56             return;
57         }
58         printf_mysql_query("UPDATE `support_ranks` SET `rank_name` = '%s' WHERE `rank_id` = '%d'", escape_string(value), rank_id);
59         current = value;
60     }
61     reply(getTextBot(), user, "\002NAME\002 %s", current);
62 }
63
64 static void neonserv_cmd_setrank_info(struct UserNode *user, int rank_id, char *current, char *value) {
65     if(value && stricmp(value, current)) {
66         printf_mysql_query("UPDATE `support_ranks` SET `rank_info` = '%s' WHERE `rank_id` = '%d'", escape_string(value), rank_id);
67         current = value;
68     }
69     reply(getTextBot(), user, "\002INFO\002 %s", current);
70 }
71
72 static void neonserv_cmd_setrank_access(struct UserNode *user, int rank_id, char *current, char *value) {
73     if(value && stricmp(value, current)) {
74         int new_access = atoi(value);
75         if(new_access <= 0 || new_access > 1000) {
76             reply(getTextBot(), user, "NS_INVALID_ACCESS", new_access);
77             return;
78         }
79         printf_mysql_query("UPDATE `users` SET `user_access` = '%d' WHERE `user_rank` = '%d'", new_access, rank_id);
80         printf_mysql_query("UPDATE `support_ranks` SET `rank_access` = '%d' WHERE `rank_id` = '%d'", new_access, rank_id);
81         current = value;
82     }
83     reply(getTextBot(), user, "\002ACCESS\002 %s", current);
84 }
85
86 static void neonserv_cmd_setrank_order(struct UserNode *user, int rank_id, char *current, char *value) {
87     if(value && stricmp(value, current)) {
88         int new_order = atoi(value);
89         if(new_order <= 0 || new_order > 99) {
90             reply(getTextBot(), user, "NS_SETRANK_ORDER_INVALID", new_order);
91             return;
92         }
93         printf_mysql_query("UPDATE `support_ranks` SET `rank_order` = '%d' WHERE `rank_id` = '%d'", new_order, rank_id);
94         current = value;
95     }
96     reply(getTextBot(), user, "\002ORDER\002 %s", current);
97 }