fixed last commits
[NeonServV5.git] / cmd_neonserv_set.c
index cd54d206d51b7e7e8798a4da7b49ddee6d780984..353287a2e64b88ac57a52260c5da6099d578b2c0 100644 (file)
@@ -1,9 +1,9 @@
 
-typedef int neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
-static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+typedef char* neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
+static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument);
 
 #define NS_VALID_FUNCTION 0x01
 #define NS_VALID_STRING   0x02
@@ -14,7 +14,7 @@ static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNod
 #define NS_VALID_BOOLEAN  0x40
 
 #define NS_HAS_OPT  0x100 /* options (SET_OPTION_{NAME}_{VALUE}) */
-#define NS_HAS_HALP 0x200 /* help    (SET_HELP_{NAME}) - only shown if help is requested */
+#define NS_HAS_HELP 0x200 /* help    (SET_HELP_{NAME}) - only shown if help is requested */
 
 static const struct {
     const char *setting;
@@ -22,7 +22,7 @@ static const struct {
     unsigned int valid;
     void *parameter;
 } channel_settings[] = {
-    {"TRIGGER",         "channel_trigger",      NS_VALID_FUNCTION,                  neonserv_cmd_set_trigger},
+    {"TRIGGER",         NULL,                   NS_VALID_FUNCTION,                  neonserv_cmd_set_trigger},
     {"DEFAULTTOPIC",    "channel_defaulttopic", NS_VALID_STRING,                    NULL},
     {"TOPICMASK",       "channel_topicmask",    NS_VALID_STRING,                    NULL},
     {"GREETING",        "channel_greeting",     NS_VALID_STRING,                    NULL},
@@ -46,7 +46,7 @@ static const struct {
     {"SETTERS",         "channel_setters",      NS_VALID_ACCESS | NS_VALID_NO501,   NULL},
     {"ADDUSER",         "channel_canadd",       NS_VALID_ACCESS,                    NULL},
     {"DELUSER",         "channel_candel",       NS_VALID_ACCESS,                    NULL},
-    {"CLVL",            "channel_canclvl",      NS_VALID_ACCESS,                    NULL2},
+    {"CLVL",            "channel_canclvl",      NS_VALID_ACCESS,                    NULL},
     {"RESYNC",          "channel_canresync",    NS_VALID_ACCESS,                    NULL},
     {"SUSPEND",         "channel_cansuspend",   NS_VALID_ACCESS,                    NULL},
     {"NOTICEUSERS",     "channel_notice",       NS_VALID_ACCESS,                    NULL},
@@ -61,34 +61,45 @@ static const struct {
 };
 
 static CMD_BIND(neonserv_cmd_set) {
-    int i;
+    int i, j;
     if(argc && strcmp(argv[0], "help")) {
         
     } else {
         check_mysql();
-        char query[512], *value, *tmp, nameBuf[64];
+        char query[1024], *value, *org_value, *tmp, nameBuf[64];
         int querypos = 0;
-        MYSQL_RES *res;
+        MYSQL_RES *res, *defaults_res;
         MYSQL_ROW row, defaults;
         struct Table *table;
         char *content[2];
         i = 0;
-        while(channel_settings[i]->setting) {
-            querypos += sprintf(query + querypos, ", `%s`", channel_settings[i]->chanfield);
+        while(channel_settings[i].setting) {
+            if(channel_settings[i].chanfield)
+                querypos += sprintf(query + querypos, ", `%s`", channel_settings[i].chanfield);
             i++;
         }
         table = table_init(2, i, 0);
         table_set_bold(table, 0, 1);
-        printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_id` = 'defaults'", query);
-        defaults = mysql_fetch_row(mysql_use());
-        printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%s'", query, chan->channel_id);
+        printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_name` = 'defaults'", query);
+        defaults_res = mysql_use();
+        defaults = mysql_fetch_row(defaults_res);
+        printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%d'", query, chan->channel_id);
         res = mysql_use();
         row = mysql_fetch_row(res);
         i = 0;
-        reply(textclient, user, "NS_SET_HEADER", chan->name);
-        while(channel_settings[i]->setting) {
-            value = (row[1+i] ? row[1+i] : defaults[1+i]);
-            if(channel_settings[i]->valid & NS_VALID_BOOLEAN) {
+        j = 0;
+        reply(getTextBot(), user, "NS_SET_HEADER", chan->name);
+        while(channel_settings[i].setting) {
+            if(channel_settings[i].chanfield) {
+                j++;
+                org_value = (row[j] ? row[j] : defaults[j]);
+            } else if(channel_settings[i].valid & NS_VALID_FUNCTION) {
+                neonserv_cmd_set_function *func = channel_settings[i].parameter;
+                org_value = func(client, user, chan, 0, NULL);
+            } else
+                org_value = "0";
+            value = org_value;
+            if(channel_settings[i].valid & NS_VALID_BOOLEAN) {
                 if(!strcmp(value, "0"))
                     value = get_language_string(user, "NS_SET_OFF");
                 else
@@ -96,45 +107,46 @@ static CMD_BIND(neonserv_cmd_set) {
             }
             strcpy(query, value);
             querypos = strlen(query);
-            if(channel_settings[i]->valid & NS_HAS_OPT) {
-                sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i]->setting, (row[1+i] ? row[1+i] : defaults[1+i]));
+            if(channel_settings[i].valid & NS_HAS_OPT) {
+                sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i].setting, org_value);
                 tmp = get_language_string(user, nameBuf);
                 if(tmp) {
                     querypos += sprintf(query+querypos, " - %s", tmp);
                 }
             }
-            if(argc && channel_settings[i]->valid & NS_HAS_HELP) {
-                sprintf(nameBuf, "NS_SET_HELP_%s", channel_settings[i]->setting);
+            if(argc && channel_settings[i].valid & NS_HAS_HELP) {
+                sprintf(nameBuf, "NS_SET_HELP_%s", channel_settings[i].setting);
                 tmp = get_language_string(user, nameBuf);
                 if(tmp) {
                     querypos += sprintf(query+querypos, " - %s", tmp);
                 }
             }
-            content[0] = channel_settings[i]->setting;
+            content[0] = (char*)channel_settings[i].setting;
             content[1] = query;
             table_add(table, content);
+            i++;
         }
         char **table_lines = table_end(table);
         for(i = 0; i < table->entrys; i++) {
             reply(getTextBot(), user, table_lines[i]);
         }
-        free_table(table);
+        table_free(table);
     }
 }
 
-static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return "+";
 }
 
-static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return NULL;
 }
 
-static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return NULL;
 }
 
-static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
-    return 1;
+static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) {
+    return NULL;
 }