Commit 7515828b authored by Maximilian Grüttemeier's avatar Maximilian Grüttemeier
Browse files

Changed the SQL and added functions

Added Functions:
- editBan()
- banUserID() ( Unfinished/Prototype )
- getActiveBans() returns all bans that are still applying and also returns important data.

Changed Function Behaviour:
- unBanUser() can just unban from the current server
- getBans() returns now all important data ( Unfinished / Prototype )
parent e804a4cb
Loading
Loading
Loading
Loading
+173 −27
Original line number Diff line number Diff line
@@ -2,11 +2,11 @@ MSync = MSync or {}
MSync.modules = MSync.modules or {}
MSync.modules.MBSync = MSync.modules.MBSync or {}
--[[
 * @file       sv_samplemodule.lua
 * @package    Sample Module
 * @file       sv_mbsync.lua
 * @package    MySQL Ban Sync
 * @author     Aperture Development
 * @license    root_dir/LICENCE
 * @version    1.0.0
 * @version    0.0.2
]]

--[[
@@ -15,8 +15,8 @@ MSync.modules.MBSync = MSync.modules.MBSync or {}
MSync.modules.MBSync.info = {
    Name = "MySQL Ban Sync",
    ModuleIdentifier = "MBSync",
    Description = "Synchronise band across your servers",
    Version = "0.0.1"
    Description = "Synchronise bans across your servers",
    Version = "0.0.2"
}

--[[
@@ -34,8 +34,8 @@ function MSync.modules.MBSync.init( transaction )
            `server_group` INT UNSIGNED NOT NULL,
            `ban_lifted` INT UNSIGNED,
            FOREIGN KEY (server_group) REFERENCES tbl_server_grp(p_group_id),
            FOREIGN KEY (userid) REFERENCES tbl_users(p_user_id),
            FOREIGN KEY (adminid) REFERENCES tbl_users(p_user_id)
            FOREIGN KEY (user_id) REFERENCES tbl_users(p_user_id),
            FOREIGN KEY (admin_id) REFERENCES tbl_users(p_user_id)
        );
    ]] ))
    
@@ -51,8 +51,7 @@ function MSync.modules.MBSync.init( transaction )
                (SELECT p_user_id FROM tbl_users WHERE steamid=? AND steamid64=?), 
            ?, ?, ?,
                (SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
            )
            ON DUPLICATE KEY UPDATE reason=VALUES(reason) AND lenght_unix=VALUES(lenght_unix) AND server_group=VALUES(server_group);
            );
        ]] )
        banUserQ:setString(1, ply:SteamID())
        banUserQ:setString(2, ply:SteamID64())
@@ -70,6 +69,65 @@ function MSync.modules.MBSync.init( transaction )
        banUserQ:start()
    end

    --[[
        Description: Function to ban a userid
        Returns: nothing
    ]]
    function MSync.modules.MBSync.banUserID(userid, calling_ply, length, reason, allserver)
        local banUserIdQ = MSync.DBServer:prepare( [[
            INSERT INTO `tbl_mbsync` (user_id, admin_id, reason, date_unix, lenght_unix, server_group)
            VALUES (
                (SELECT p_user_id FROM tbl_users WHERE steamid=? OR steamid64=? OR p_user_id=?), 
                (SELECT p_user_id FROM tbl_users WHERE steamid=? AND steamid64=?), 
            ?, ?, ?,
                (SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
            );
        ]] )
        banUserIdQ:setString(1, userid)
        banUserIdQ:setString(2, userid)
        banUserIdQ:setString(3, userid)
        banUserIdQ:setString(4, calling_ply:SteamID())
        banUserIdQ:setString(5, calling_ply:SteamID64())
        banUserIdQ:setString(6, reason)
        banUserIdQ:setNumber(7, os.time())
        banUserIdQ:setNumber(8, lenght)
        if not allserver then
            banUserIdQ:setString(9, MSync.settings.data.serverGroup)
        else
            banUserIdQ:setString(9, "allservers")
        end
            
        banUserIdQ:start()
    end

    --[[
        Description: Function to edit a ban
        Returns: nothing
    ]]
    function MSync.modules.MBSync.editBan(banId, reason, lenght, calling_ply, allserver)
        local editBanQ = MSync.DBServer:prepare( [[
            UPDATE `tbl_mbsync`
            SET 
                reason=?,
                lenght_unix=?,
                adminid=(SELECT p_user_id FROM tbl_users WHERE steamid=? AND steamid64=?),
                server_group=(SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
            WHERE p_ID=?
        ]] )
        editBanQ:setString(1, reason)
        editBanQ:setString(2, lenght)
        editBanQ:setString(3, calling_ply:SteamID())
        editBanQ:setString(4, calling_ply:SteamID64())
        if not allserver then
            editBanQ:setString(5, MSync.settings.data.serverGroup)
        else
            editBanQ:setString(5, "allservers")
        end
        editBanQ:setString(6, banId)
            
        editBanQ:start()
    end

    --[[
        Description: Function to unban a banId
        Returns: nothing
@@ -104,11 +162,7 @@ function MSync.modules.MBSync.init( transaction )
        unBanUserQ:setString(2, calling_ply:SteamID64())
        unBanUserQ:setString(3, ply:SteamID())
        unBanUserQ:setString(4, ply:SteamID64())
        if not allserver then
            banUserQ:setString(5, MSync.settings.data.serverGroup)
        else
            banUserQ:setString(5, "allservers")
        end
        unBanUserQ:setString(5, MSync.settings.data.serverGroup)
            
        unBanUserQ:start()
    end
@@ -119,24 +173,116 @@ function MSync.modules.MBSync.init( transaction )
    ]]
    function MSync.modules.MBSync.getBans(ply)
        local getBansQ = MSync.DBServer:prepare( [[
            SELECT * FROM `tbl_mbsync`;
            SELECT 
                tbl_mbsync.p_id, 
                tbl_mbsync.reason, 
                tbl_mbsync.date_unix,
                tbl_mbsync.lenght_unix,
                banned.steamid AS 'banned.steamid',
                banned.steamid64 AS 'banned.steamid64',
                banned.nickname AS 'banned.nickname',
                admin.steamid AS 'admin.steamid',
                admin.steamid64 AS 'admin.steamid64',
                admin.nickname AS 'admin.nickname',
                unban_admin.steamid AS 'unban_admin.steamid',
                unban_admin.steamid64 AS 'unban_admin.steamid64',
                unban_admin.nickname AS 'unban_admin.nickname',
                tbl_server_grp.group_name
            FROM `tbl_mbsync`
            LEFT JOIN tbl_server_grp 
                ON tbl_mbsync.server_group = tbl_server_grp.p_group_id
            LEFT JOIN tbl_users AS banned 
                ON tbl_mbsync.userid = banned.p_user_id
            LEFT JOIN tbl_users AS admin 
                ON tbl_mbsync.adminid = admin.p_user_id
            LEFT JOIN tbl_users AS unban_admin 
                ON tbl_mbsync.ban_lifted = unban_admin.p_user_id
            ;
        ]] )
        getBansQ:setString(1, ply:SteamID())
        unBanUserQ:setString(2, ply:SteamID64())
        unBanUserQ:setString(3, calling_ply:SteamID())
        unBanUserQ:setString(4, calling_ply:SteamID64())
        unBanUserQ:setString(5, reason)
        unBanUserQ:setNumber(6, os.time())
        unBanUserQ:setNumber(7, lenght)
        if not allserver then
            unBanUserQ:setString(8, MSync.settings.data.serverGroup)
        else
            unBanUserQ:setString(8, "allservers")
        end
            
        --[[
            Ban Table Lua structure:
            bans = {
                [tbl_mbsync.p_id] = {
                    reason =  tbl_mbsync.reason
                    banDate = tbl_mbsync.date_unix
                    banLenght = tbl_mbsync.lenght_unix
                    bannedUser = {
                        steamid = banned.steamid
                        steamid64 = banned.steamid64
                        nickname = banned.nickname
                    }
                    banningAdmin = {
                        steamid = admin.steamid
                        steamid64 = admin.steamid64
                        nickname = admin.nickname
                    }
                    unBanningAdmin = {
                        steamid = unban_admin.steamid
                        steamid64 = unban_admin.steamid64
                        nickname = unban_admin.nickname
                    }
                }
            }
        ]]
        banunBanUserQUserQ:start()
    end

    --[[
        Description: Function to get all active bans
        Returns: nothing
    ]]
    function MSync.modules.MBSync.getActiveBans()
        local getActiveBansQ = MSync.DBServer:prepare( [[
            SELECT 
                tbl_mbsync.*,
                banned.steamid,
                banned.steamid64,
                banned.nickname,
                admin.nickname
            FROM `tbl_mbsync`
            LEFT JOIN tbl_users AS banned
                ON tbl_mbsync.userid = banned.p_group_id
            LEFT JOIN tbl_users AS admin
                ON tbl_mbsync.adminid = admin.p_group_id
            WHERE
                ban_lifted IS NULL AND
                (
                    (date_unix+lenght_unix)>? OR
                     lenght_unix=0
                ) AND
                (
                    server_group=(SELECT p_group_id FROM tbl_server_grp WHERE group_name=?) OR
                    server_group=(SELECT p_group_id FROM tbl_server_grp WHERE group_name='allservers')
                )
        ]] )
        getActiveBansQ:setNumber(1, os.time())
        getActiveBansQ:setString(8, MSync.settings.data.serverGroup)
        --[[
            Ban Table Lua structure:
            activeBans = {
                [banned.steamid64] = {
                    banId = tbl_mbsync.p_id
                    reason = tbl_mbsync.reason
                    timestamp = tbl_mbsync.date_unix
                    length = tbl_mbsync.lenght_unix
                    banned = {
                        steamid = banned.steamid
                        Nickname = banned.nickname
                    }
                    adminNickname = admin.nickname
                }
            }
        ]]
        function getActiveBansQ.onData( q, data )
            if data.rank == ply:GetUserGroup() then return end;

            ply:SetUserGroup(data[1].rank)
        end

        getActiveBansQ:start()
    end

end

--[[