added cmd_rename
[NeonServV5.git] / src / DBHelper.c
index 643eb2f0082b643e1105840e0fe8e48d1e1aa609..fec30a256e570fe7f4bb2d590b5feb24cfc3d44f 100644 (file)
@@ -180,3 +180,46 @@ char *getBanAffectingMask(struct ChanNode *chan, char *mask) {
     }
     return NULL;
 }
+
+int renameAccount(char *oldauth, char *newauth) {
+    MYSQL_RES *res, *res2;
+    MYSQL_ROW row, row2;
+    printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(oldauth));
+    res = mysql_use();
+    if ((row = mysql_fetch_row(res)) != NULL) {
+        int userid = atoi(row[0]);
+        printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(newauth));
+        res = mysql_use();
+        if((row = mysql_fetch_row(res)) != NULL) {
+            //merge
+            int newuid = atoi(row[0]);
+            printf_mysql_query("SELECT `chanuser_id`, `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%d'", newuid);
+            res = mysql_use();
+            while((row = mysql_fetch_row(res)) != NULL) {
+                printf_mysql_query("SELECT `chanuser_id`, `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%d'", userid);
+                res2 = mysql_use();
+                if((row2 = mysql_fetch_row(res2)) != NULL) {
+                    if(atoi(row[0]) > atoi(row2[0])) {
+                        printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = '%s' WHERE `chanuser_id` = '%s'", row[0], row2[0]);
+                    }
+                    printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_id` = '%s'", row[0]);
+                } else
+                    printf_mysql_query("UPDATE `chanusers` SET `chanuser_uid` = '%d' WHERE `chanuser_id` = '%s'", userid, row[0]);
+            }
+            printf_mysql_query("UPDATE `channels` SET `channel_registrator` = '%d' WHERE `channel_registrator` = '%d'", userid, newuid);
+            printf_mysql_query("UPDATE `bans` SET `ban_owner` = '%d' WHERE `ban_owner` = '%d'", userid, newuid);
+            printf_mysql_query("UPDATE `events` SET `auth` = '%s' WHERE `auth` = '%s'", escape_string(newauth), escape_string(oldauth));
+            printf_mysql_query("UPDATE `godlog` SET `godlog_uid` = '%d' WHERE `godlog_uid` = '%d'", userid, newuid);
+            printf_mysql_query("UPDATE `owner_history` SET `owner_history_to_uid` = '%d' WHERE `owner_history_to_uid` = '%d'", userid, newuid);
+            printf_mysql_query("UPDATE `owner_history` SET `owner_history_from_uid` = '%d' WHERE `owner_history_from_uid` = '%d'", userid, newuid);
+            printf_mysql_query("UPDATE `owner_history` SET `owner_history_from_uid` = '%d' WHERE `owner_history_from_uid` = '%d'", userid, newuid);
+            printf_mysql_query("UPDATE `noinvite` SET `uid` = '%d' WHERE `uid` = '%d'", userid, newuid);
+            printf_mysql_query("DELETE FROM `users` WHERE `chanuser_id` = '%d'", newuid);
+        } else {
+            //simply rename the account
+            printf_mysql_query("UPDATE `users` SET `user_user` = '%s' WHERE `user_id` = '%d'", escape_string(newauth), userid);
+        }
+        return 1;
+    }
+    return 0;
+}