changed Makefile; build all commands as an own file
[NeonServV5.git] / cmd_neonserv_myaccess.c
index ccda707e7efe048fb2e55f57c8e7504d298b64e3..093e28a65bfbc33df9b5b3e2512994d9d6e7d7ed 100644 (file)
@@ -1,4 +1,6 @@
 
+#include "cmd_neonserv.h"
+
 /*
 * argv[0] - nick / *auth
 */
@@ -13,7 +15,7 @@ struct neonserv_cmd_myaccess_cache {
     char *chanmatch;
 };
 
-static CMD_BIND(neonserv_cmd_myaccess) {
+CMD_BIND(neonserv_cmd_myaccess) {
     char *chanmatch = NULL;
     if(argc == 0 || argv[0][0] == '#') {
         if(argc != 0) {
@@ -93,11 +95,11 @@ static USERAUTH_CALLBACK(neonserv_cmd_myaccess_nick_lookup) {
 
 static void neonserv_cmd_myaccess_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, char *chanmatch) {
     //we've got a valid auth now...
-    MYSQL_RES *res;
-    MYSQL_ROW user_row, chanuser_row;
+    MYSQL_RES *res, *default_res;
+    MYSQL_ROW user_row, chanuser_row, default_chan = NULL;
     char flagBuf[5];
     int userid, cflags, caccess, flagPos;
-    int total_count, match_count = 0, owner_count = 0;
+    int i, total_count, match_count = 0, owner_count = 0;
     struct Table *table;
     printf_mysql_query("SELECT `user_id`, `user_access`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
     res = mysql_use();
@@ -110,33 +112,38 @@ static void neonserv_cmd_myaccess_async1(struct ClientSocket *client, struct Cli
     content[3] = get_language_string(user, "NS_MYACCESS_HEADER_INFO");
     table_add(table, content);
     if(chanmatch)
-        reply(textbot, user, "NS_MYACCESS_HEADER_MATCH", auth, chanmatch);
+        reply(textclient, user, "NS_MYACCESS_HEADER_MATCH", auth, chanmatch);
     else
-        reply(textbot, user, "NS_MYACCESS_HEADER", auth);
+        reply(textclient, user, "NS_MYACCESS_HEADER", auth);
     if ((user_row = mysql_fetch_row(res)) != NULL) {
         userid = atoi(user_row[0]);
         //check if the user is already added
         printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags`, `chanuser_infoline`, `channel_name`, `channel_getop`, `channel_getvoice` FROM `chanusers` LEFT JOIN `channels` ON `chanuser_cid` = `channel_id` WHERE `chanuser_uid` = '%d' ORDER BY `chanuser_access` DESC, `channel_name` ASC", userid);
         res = mysql_use();
         while ((chanuser_row = mysql_fetch_row(res)) != NULL) {
-            if(!strcmp(row[0], "500")) owner_count++;
-            if(chanmatch && match(chanmatch, row[0])) continue;
+            if(!strcmp(chanuser_row[0], "500")) owner_count++;
+            if(chanmatch && match(chanmatch, chanuser_row[0])) continue;
             match_count++;
+            if((!chanuser_row[4] || !chanuser_row[5]) && !default_chan) {
+                printf_mysql_query("SELECT `channel_getop`, `channel_getvoice` FROM `channels` WHERE `channel_name` = 'defaults'");
+                default_res = mysql_use();
+                default_chan = mysql_fetch_row(default_res);
+            }
             flagPos = 0;
-            content[0] = row[3];
-            content[1] = row[0];
-            cflags = atoi(row[1]);
-            caccess = atoi(row[0]);
+            content[0] = chanuser_row[3];
+            content[1] = chanuser_row[0];
+            cflags = atoi(chanuser_row[1]);
+            caccess = atoi(chanuser_row[0]);
             if((cflags & DB_CHANUSER_SUSPENDED))
                 flagPos += sprintf(flagBuf + flagPos, "s");
-            if(caccess >= atoi(row[4]))
+            if(caccess >= (chanuser_row[4] ? atoi(chanuser_row[4]) : atoi(default_chan[0])))
                 flagPos += sprintf(flagBuf + flagPos, "o");
-            if(caccess >= atoi(row[5]))
+            if(caccess >= (chanuser_row[5] ? atoi(chanuser_row[5]) : atoi(default_chan[1])))
                 flagPos += sprintf(flagBuf + flagPos, "v");
             if((cflags & DB_CHANUSER_AUTOINVITE))
                 flagPos += sprintf(flagBuf + flagPos, "i");
             content[2] = flagBuf;
-            content[3] = row[2];
+            content[3] = chanuser_row[2];
             table_add(table, content);
         }
     }
@@ -145,11 +152,11 @@ static void neonserv_cmd_myaccess_async1(struct ClientSocket *client, struct Cli
     for(i = 0; i < table->entrys; i++) {
         reply(textclient, user, table_lines[i]);
     }
-    if(!content_count)
+    if(!match_count)
         reply(textclient, user, "NS_TABLE_NONE");
     if(chanmatch) {
-        reply(textbot, user, "NS_MYACCESS_COUNT_MATCH", auth, total_count, owner_count, match_count, chanmatch);
+        reply(textclient, user, "NS_MYACCESS_COUNT_MATCH", auth, total_count, owner_count, match_count, chanmatch);
     } else {
-        reply(textbot, user, "NS_MYACCESS_COUNT", auth, total_count, owner_count);
+        reply(textclient, user, "NS_MYACCESS_COUNT", auth, total_count, owner_count);
     }
 }