Raised This Month: $32 Target: $400
 8% 

Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!


Post New Thread Reply   
 
Thread Tools Display Modes
welcome
Junior Member
Join Date: Apr 2010
Old 11-15-2010 , 17:27   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #11

Hi there!
Hopefully someone could help me as I would really like to use this integration for our community, but can't seem to get this working.

I have copied over the file "CServerRcon.php" from my sourcebans install dir/includes/ " to my vbulliten install dir/includes/cron directory

I have uploaded the "vbtosourcebans.php.text renaming it to "vbtosourcebans.php" to my vbulliten install dir/includes/cron directory

I have edited the "vbtosourcebans.php" file to include my database remote IP, Username, Password, admin ID, and my custom field ID that I created for STEAM ID:

I created a cron through vb to run "vbtosourcebans.php" as required.

But I don't get how this works? or is not working? I have the same versions of vb and SB as everyone else who says it is working fine.

What am I missing? would appreciate the help., Thanks!
welcome is offline
SmackDaddy
Veteran Member
Join Date: Oct 2009
Old 11-18-2010 , 17:26   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #12

Anyone able to do this for Invision Board?!? Thanks in advance.
SmackDaddy is offline
bouncer
Veteran Member
Join Date: Apr 2009
Old 11-18-2010 , 17:27   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #13

I will post a tutorial soon with more customizations at www.FragToss.com
__________________


bouncer is offline
daleGEND
AlliedModders Donor
Join Date: Feb 2005
Location: USA
Old 12-19-2010 , 21:36   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #14

Fixed my error!

But, if someone updates their custom STEAMID field, does it automatically update SB?
__________________
Bor3d Gaming - A Mature Online Gaming Community

Feel free to add me on STEAM as well: https://steamcommunity.com/id/b0r3d

Last edited by daleGEND; 12-19-2010 at 22:20.
daleGEND is offline
Invader Amoto
Member
Join Date: May 2009
Old 03-11-2011 , 02:00   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #15

There's a minor problem in the script. When checking to remove an admin, it checks if his secondary groups (supposed to be '$user_additional_groups'), but the array containing his second groups isn't created until further down in the script, so it will always remove him from sourcebans if his primary group isn't one of the groups with admin. I haven't finished looking through it, but I believe you have it set up so that it will re-add him to sourcebans before the end of the script anyway.

Awesome work on this, Geit, and thank you very much, bouncer, for releasing it!
Invader Amoto is offline
wtfaatp
Senior Member
Join Date: Jul 2010
Old 03-15-2011 , 05:44   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #16

IM having a realli weird problem were normal members on my VB are being added? vb group ID 2..

Here is my "vbtosourcebans.php"
PHP Code:
<?php
//THIS CODE IS INTENDED FOR USE AS A VBULLETIN 4 CRON SCRIPT, IT REQUIRES THE VBULLETIN GLOBAL VAR PROVIDED BY CRONMANAGER.PHP - YOU MAY EMULATE THIS FUNCTIONALITY BY INCLUDING THE VBULLETIN GLOBAL.PHP
//RECCOMENDED SCHEDULE IS EVERY 30 MINUTES TO 1 HOUR
// ############################# VARIABLES ################################
mysql_pconnect("******""root""*****"); //MYSQL information for the SourceBans/Vbulletin Database
$db_sourcebans "sourcebans"//Database name for SourceBans
$steamid_custom_field "field11"//The custom field id for the users SteamID, it is reccomended that you only let the user set their steamid on signup or you may have people changing their steamid's and giving other people admin.
define("DB_PREFIX""sb"); //Table Prefix for SourceBans
$groups_with_admin = array(19,18,13,15,16,17); // Comma delimited list of  vBulletin groups with admin.
$ban_site_url "http://98.224.170.160.com/bans"//URL to the Sourcebans installation, no trailing forward slash
$clan_name "[mFc.] Middle Fingah Click"// Name of your clan
$pm_from_userid=1//The vBulletin UserID to send the PM from
$pm_from_user_text="wtfaatp";    //The vBulletin Username to send the PM from

// ######################## SET PHP ENVIRONMENT ###########################
mysql_select_db($db_sourcebans);
mysql_set_charset('utf8');
require 
"CServerRcon.php"//This file can be found in Sourcebans_web/includes/ and must be located in the same folder as this script.
error_reporting(E_ALL & ~E_NOTICE); //Prevents "Notices" From showing up
if (!is_object($vbulletin->db)) // Checks if the vbulletin database is accessiable, otherwise exit the script.
{
    exit;
}
$vbulletin->db->hide_errors(); // Hide Database errors from Vbulletin

// ############################ FUNCTIONS ################################
function encrypt_password($password$salt='SourceBans'// If you use a different salt for your sourcebans installation, Change this.
{
    return 
sha1(sha1($salt $password));
}    
function 
getRandomPassword($length ""//Returns a random alphanumeric string of the specified length, 32 chars if unspecified
{    
    
$code md5(uniqid(rand(), true));
    if (
$length != "") return substr($code0$length);
    else return 
$code;
}
function 
AddAdmin($sourcebans_group_web$sourcebans_group_server$sourcebans_group_server_name$sourcebans_group_server_access$username$email$steamid$userid)
{
    
$password getRandomPassword(8); // Generate a password for the user
    
$res2 mysql_query("SELECT `aid`, `group_id` FROM ".DB_PREFIX."_admins LEFT JOIN ".DB_PREFIX."_admins_servers_groups ON ".DB_PREFIX."_admins.aid=".DB_PREFIX."_admins_servers_groups.admin_id WHERE user='".mysql_real_escape_string($username)."'") or die(mysql_error()); //A quick query so we can check to see if the admin is already an admin and whether they've been promoted or not
    
$row2 mysql_fetch_assoc($res2); // Fetch the result from the previous query
    
mysql_query("INSERT INTO ".DB_PREFIX."_admins(user, authid, password, gid, email, srv_group)
                VALUES ('"
.mysql_real_escape_string($username)."','".mysql_real_escape_string($steamid)."','".encrypt_password($password)."',".$sourcebans_group_web.",'".mysql_real_escape_string($email)."','".mysql_real_escape_string($sourcebans_group_server_name)."') ON DUPLICATE KEY UPDATE srv_group='".mysql_real_escape_string($sourcebans_group_server_name)."', gid='".$sourcebans_group_web."'") or die(mysql_error()); // Add the admin to the SourceBans database or, if they already exist, update their group data.
    
if(mysql_affected_rows() > 0//Check if the last query affected any rows, did it change anything or add a new admin? If no, skip.
    
{
        
$res3 mysql_query("SELECT `aid` FROM ".DB_PREFIX."_admins WHERE user='".mysql_real_escape_string($username)."'") or die(mysql_error()); // Select the users AdminID
        
$row3 mysql_fetch_assoc($res3);// Fetch the result from the previous query
        
mysql_query("DELETE FROM ".DB_PREFIX."_admins_servers_groups WHERE admin_id='".$row3['aid']."'") or die(mysql_error());//Delete the users admin group data from the table
        
mysql_query("INSERT IGNORE INTO ".DB_PREFIX."_admins_servers_groups(admin_id, group_id, srv_group_id, server_id) VALUES (".$row3['aid'].",".$sourcebans_group_server.",".$sourcebans_group_server_access.", -1)") or die(mysql_error()); //Add back their new data.
        
        //This next bit handles the PMs, the promotion/demotion will only work if your "highest power" admin group is the first id and the "lowest power" is the last id. i.e - Managers = GID1, Council = GID2, Admins = GID3, Members = GID4, Recruits = GID5
        
if(mysql_num_rows($res2) == 0)
        {
            
SendPM($userid$username$sourcebans_group_server_name$password0); //Send the user a message with their password and username telling them that they've been added to the system.
        
}
        elseif (
$sourcebans_group_server $row2['group_id'])
        {
            
SendPM($userid$username$sourcebans_group_server_name$password1); //Tell the user that they have been promoted in sourcebans.
        
}
        elseif (
$sourcebans_group_server $row2['group_id'])
        {
            
SendPM($userid$username$sourcebans_group_server_name$password2); //Tell the user that they have been demoted in sourcebans.
        
}
    }
}
function 
SendPM($pm_userid$pm_username$pm_group_name$pm_password$text// Send a PM to the user, there is an actual datamanager API in vB for this, but it wasn't working reliable so I fell back on this method
{
    global 
$vbulletin$ban_site_url$clan_name$pm_from_userid$pm_from_user_text;
    switch(
$text//The messages, pretty self explanatory which is which.
    
{
        case 
0:
            
$pm_text_title="Added to Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        You have been added as a "
.$pm_group_name." to the ".$clan_name." admin system. Please find below the details required to login to the admin web panel, you will be able to access in-game admin automatically.

                        Username: [B]"
.$pm_username."[/B]
                        Password: [B]"
.$pm_password."[/B]

                        You can use this information to login into your new account at: "
.$ban_site_url."/index.php?p=login

                        It is HIGHLY recommended for security reasons that you change your password to something memorable once you login. If you have any questions please contact me about any problems.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
        case 
1:
            
$pm_text_title="Promoted in Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        Congratulations! You have been promoted to a "
.$pm_group_name." on the ".$clan_name." admin system. Your login details are the same as before.

                        You can use this information to login into your account at: "
.$ban_site_url."/index.php?p=login

                        If you have any questions please contact me about any problems.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
        case 
2:
            
$pm_text_title="Demoted in Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        We are afraid that you have been demoted to a "
.$pm_group_name." on the ".$clan_name." admin system. Your login details are the same as before.

                        You can use this information to login into your account at: "
.$ban_site_url."/index.php?p=login

                        If you have any questions please contact me about any problems.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
        case 
3:
            
$pm_text_title="Removed from Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        We are afraid that you have been removed from the "
.$clan_name." admin system. 

                        If you have any questions please contact me about any problems.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
    }
    
$botpermissions['adminpermissions'] = 6;
    
$pmdm =& datamanager_init('PM'$vbulletinERRTYPE_ARRAY);
    
$pmdm->overridequota true;
    
$pmdm->set('fromuserid'$pm_from_userid);
    
$pmdm->set('fromusername'$pm_from_userid_text);
    
$pmdm->set_info('receipt'$vbulletin->GPC['receipt']);            //false    
    
$pmdm->set_info('savecopy'$vbulletin->GPC['savecopy']);     //false
    
$pmdm->set('allowsmilie'$vbulletin->GPC['allowsmilie']);    //true
    
$pmdm->set('title'$pm_text_title);
    
$pmdm->set('message'$pm_text);
    
$pmdm->set_recipients($pm_username$botpermissions);
    
$pmdm->set('dateline'TIMENOW);

    
$pmdm->pre_save();
    if (empty(
$pmdm->errors))
    {
            
$pmdm->save();
    }
    else
    {
        echo 
"<hr><b><font color=red>PM was not sent, Reason:</font></b><pre>";
        
print_r($pmdm->errors);
        echo 
"</pre><hr> ";
    }
    unset(
$pmdm);
}
// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################
$res $vbulletin->db->query_read("SELECT `username`, `user`.`userid` as userid, `usergroupid`, `membergroupids`, `email`, `".$steamid_custom_field."` FROM "TABLE_PREFIX ."user LEFT JOIN `"TABLE_PREFIX ."userfield` ON `user`.`userid`=`userfield`.`userid`"); //Select all users from the Vbulletin Database
while($row mysql_fetch_assoc($res))
{
    
// CLEANUP OLD/INVALID ADMINS
    
$res2 mysql_query("SELECT `aid` FROM ".DB_PREFIX."_admins WHERE user='".$row['username']."'") or die(mysql_error()); //Check if the user has a sourcebans account
    
$row2 mysql_fetch_assoc($res2);
    if (
mysql_num_rows($res2)>&& !in_array($row['usergroupid'], $groups_with_admin)) //If yes, and they are not in one of the admin groups defined above then...
    
{
        
$additionaluser=false;
        for(
$i 0$i count($user_additional_groups); $i ++) //Check if they are marked as an additional user to any of the admin groups defined above
        
{
            if (
in_array($user_additional_groups[$i], $groups_with_admin))
            {
                
$additionaluser=true;
                break;
            }
        }
        if(
$additionaluser == false// If they aren't remove them from SourceBans.
        
{
            
mysql_query("DELETE FROM ".DB_PREFIX."_admins_servers_group WHERE admin_id='".$row2['aid']."'");
            
mysql_query("DELETE FROM ".DB_PREFIX."_admins WHERE aid='".$row2['aid']."'");
            
SendPM($row['userid'], $row['username'], "None""None"3); //Send a PM telling them that they've been removed from sourcebans
        
}
    }
    
    
// PRIMARY USERGROUP ADMIN CONTROL
    
    
if (in_array($row['usergroupid'], $groups_with_admin)) //If the user is in a primary group defined as an admin, then add/edit them as such.
    
{
        switch(
$row['usergroupid']) 
        {    
            case 
16//Group ID from vBulletin
                //AddAdmin(Sourcebans Web GroupID, Sourcebans Admin GroupID, Sourcebans Admin Group Name (Must be EXACT), Sourcebans Server GroupID, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid'])
                
AddAdmin(11"Leaders"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
18:
                
AddAdmin(12"Vice-Founders"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
15:
                
AddAdmin(23"H-Exec"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
17:
                
AddAdmin(24"Admins"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
13:
                
AddAdmin(26"Members"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
19:
                
AddAdmin(25"Donators"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
        }
        continue;
    }
    
    
// ADDITIONAL USERGROUP ADMIN CONTROL
    
if (strlen ($row['membergroupids']) > 0){
    
$user_additional_groups=explode(","$row['membergroupids']);
    }
    
    for(
$i 0$i count($user_additional_groups); $i ++) //If the user is in a secondary group defined as an admin, then add/edit them as such, same format as above.
    
{
        if (
in_array($user_additional_groups[$i], $groups_with_admin))
        {
            switch(
$user_additional_groups[$i]) 
            {    
            case 
16//Group ID from vBulletin
                //AddAdmin(Sourcebans Web GroupID, Sourcebans Admin GroupID, Sourcebans Admin Group Name (Must be EXACT), Sourcebans Server GroupID, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid'])
                
AddAdmin(11"Leaders"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
18:
                
AddAdmin(12"Vice-Founders"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
15:
                
AddAdmin(23"H-Exec"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
17:
                
AddAdmin(24"Admins"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
13:
                
AddAdmin(26"Members"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            case 
19:
                
AddAdmin(25"Donators"1$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                break;
            }
            continue;
        }
    }
}
//REHASH SERVERS, DOES NOT REQUIRE EDITING
$res mysql_query("SELECT ip, port, rcon FROM ".DB_PREFIX."_servers WHERE enabled=1") or die(mysql_error());
while(
$row mysql_fetch_assoc($res))
{
    if (
strlen($row['rcon']) > 0)
    {
        
$rcon = new CServerRcon($row['ip'], $row['port'], $row['rcon']);
        if(!
$rcon->Auth())
        {
            continue;
        }
        
$rcon->rconCommand("sm_rehash");
        unset(
$rcon);
    }
}
?>
wtfaatp is offline
casvdry
Member
Join Date: Mar 2008
Old 03-19-2011 , 03:58   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #17

Confirmed to work with 3.8.
casvdry is offline
casvdry
Member
Join Date: Mar 2008
Old 03-19-2011 , 04:00   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #18

Quote:
Originally Posted by wtfaatp View Post
IM having a realli weird problem were normal members on my VB are being added? vb group ID 2..

Here is my "vbtosourcebans.php"
PHP Code:
$groups_with_admin = array(19,18,13,15,16,17); 
You need to change these #'s to match the #'s of your usergroup ID's.
casvdry is offline
daleGEND
AlliedModders Donor
Join Date: Feb 2005
Location: USA
Old 04-11-2011 , 09:56   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #19

If anyone is looking for this to work with XenForo, we are currently testing a sync that does work but has a few slight bugs we hope to iron out this week/end. Thanks!
__________________
Bor3d Gaming - A Mature Online Gaming Community

Feel free to add me on STEAM as well: https://steamcommunity.com/id/b0r3d
daleGEND is offline
wtfaatp
Senior Member
Join Date: Jul 2010
Old 04-12-2011 , 18:15   Re: Vbulletin 4.X Integration with Sourcebans! FINALLY HERE!
Reply With Quote #20

I'm using the Vbulletin to sorcebans cronjob.

Hwo ever when ever I run the cronjob myself i get this error.

Code:
Warning: stream_set_timeout(): supplied argument is not a valid stream resource in [path]/includes/cron/CServerRcon.php on line 50

Warning: fwrite(): supplied argument is not a valid stream resource in [path]/includes/cron/CServerRcon.php on line 71

Warning: fwrite(): supplied argument is not a valid stream resource in [path]/includes/cron/CServerRcon.php on line 71

Warning: stream_set_timeout(): supplied argument is not a valid stream resource in [path]/includes/cron/CServerRcon.php on line 50

Warning: fwrite(): supplied argument is not a valid stream resource in [path]/includes/cron/CServerRcon.php on line 71

Warning: fwrite(): supplied argument is not a valid stream resource in [path]/includes/cron/CServerRcon.php on line 71
Done
This is my vbtosourcebans.php
PHP Code:
<?php
//THIS CODE IS INTENDED FOR USE AS A VBULLETIN 4 CRON SCRIPT, IT REQUIRES THE VBULLETIN GLOBAL VAR PROVIDED BY CRONMANAGER.PHP - YOU MAY EMULATE THIS FUNCTIONALITY BY INCLUDING THE VBULLETIN GLOBAL.PHP
//RECCOMENDED SCHEDULE IS EVERY 30 MINUTES TO 1 HOUR
// ############################# VARIABLES ################################
mysql_pconnect("***""***""***"); //MYSQL information for the SourceBans/Vbulletin Database
$db_sourcebans "***"//Database name for SourceBans
$steamid_custom_field "field11"//The custom field id for the users SteamID, it is reccomended that you only let the user set their steamid on signup or you may have people changing their steamid's and giving other people admin.
define("DB_PREFIX""sb"); //Table Prefix for SourceBans
$groups_with_admin = array(6,9,10,11,12,13); // Comma delimited list of  vBulletin groups with admin.
$ban_site_url "http://www.mfc4life.com/bans"//URL to the Sourcebans installation, no trailing forward slash
$clan_name "Middle Fingah Click"// Name of your clan
$pm_from_userid=1//The vBulletin UserID to send the PM from
$pm_from_user_text="wtfaatp";    //The vBulletin Username to send the PM from

// ######################## SET PHP ENVIRONMENT ###########################
mysql_select_db($db_sourcebans);
mysql_set_charset('utf8');
require 
"CServerRcon.php"//This file can be found in Sourcebans_web/includes/ and must be located in the same folder as this script.
error_reporting(E_ALL & ~E_NOTICE); //Prevents "Notices" From showing up
if (!is_object($vbulletin->db)) // Checks if the vbulletin database is accessiable, otherwise exit the script.
{
    exit;
}
$vbulletin->db->hide_errors(); // Hide Database errors from Vbulletin

// ############################ FUNCTIONS ################################
function encrypt_password($password$salt='SourceBans'// If you use a different salt for your sourcebans installation, Change this.
{
    return 
sha1(sha1($salt $password));
}    
function 
getRandomPassword($length ""//Returns a random alphanumeric string of the specified length, 32 chars if unspecified
{    
    
$code md5(uniqid(rand(), true));
    if (
$length != "") return substr($code0$length);
    else return 
$code;
}
function 
AddAdmin($sourcebans_group_web$sourcebans_group_server$sourcebans_group_server_name$sourcebans_group_server_access$username$email$steamid$userid)
{
    
$password getRandomPassword(8); // Generate a password for the user
    
$res2 mysql_query("SELECT `aid`, `group_id` FROM ".DB_PREFIX."_admins LEFT JOIN ".DB_PREFIX."_admins_servers_groups ON ".DB_PREFIX."_admins.aid=".DB_PREFIX."_admins_servers_groups.admin_id WHERE user='".mysql_real_escape_string($username)."'") or die(mysql_error()); //A quick query so we can check to see if the admin is already an admin and whether they've been promoted or not
    
$row2 mysql_fetch_assoc($res2); // Fetch the result from the previous query
    
mysql_query("INSERT INTO ".DB_PREFIX."_admins(user, authid, password, gid, email, srv_group)
                VALUES ('"
.mysql_real_escape_string($username)."','".mysql_real_escape_string($steamid)."','".encrypt_password($password)."',".$sourcebans_group_web.",'".mysql_real_escape_string($email)."','".mysql_real_escape_string($sourcebans_group_server_name)."') ON DUPLICATE KEY UPDATE srv_group='".mysql_real_escape_string($sourcebans_group_server_name)."', gid='".$sourcebans_group_web."'") or die(mysql_error()); // Add the admin to the SourceBans database or, if they already exist, update their group data.
    
if(mysql_affected_rows() > 0//Check if the last query affected any rows, did it change anything or add a new admin? If no, skip.
    
{
        
$res3 mysql_query("SELECT `aid` FROM ".DB_PREFIX."_admins WHERE user='".mysql_real_escape_string($username)."'") or die(mysql_error()); // Select the users AdminID
        
$row3 mysql_fetch_assoc($res3);// Fetch the result from the previous query
        
mysql_query("DELETE FROM ".DB_PREFIX."_admins_servers_groups WHERE admin_id='".$row3['aid']."'") or die(mysql_error());//Delete the users admin group data from the table
        
mysql_query("INSERT IGNORE INTO ".DB_PREFIX."_admins_servers_groups(admin_id, group_id, srv_group_id, server_id) VALUES (".$row3['aid'].",".$sourcebans_group_server.",".$sourcebans_group_server_access.", -1)") or die(mysql_error()); //Add back their new data.
        
        //This next bit handles the PMs, the promotion/demotion will only work if your "highest power" admin group is the first id and the "lowest power" is the last id. i.e - Managers = GID1, Council = GID2, Admins = GID3, Members = GID4, Recruits = GID5
        
if(mysql_num_rows($res2) == 0)
        {
            
SendPM($userid$username$sourcebans_group_server_name$password0); //Send the user a message with their password and username telling them that they've been added to the system.
        
}
        elseif (
$sourcebans_group_server $row2['group_id'])
        {
            
SendPM($userid$username$sourcebans_group_server_name$password1); //Tell the user that they have been promoted in sourcebans.
        
}
        elseif (
$sourcebans_group_server $row2['group_id'])
        {
            
SendPM($userid$username$sourcebans_group_server_name$password2); //Tell the user that they have been demoted in sourcebans.
        
}
    }
}
function 
SendPM($pm_userid$pm_username$pm_group_name$pm_password$text// Send a PM to the user, there is an actual datamanager API in vB for this, but it wasn't working reliable so I fell back on this method
{
    global 
$vbulletin$ban_site_url$clan_name$pm_from_userid$pm_from_user_text;
    switch(
$text//The messages, pretty self explanatory which is which.
    
{
        case 
0:
            
$pm_text_title="Added to Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        You have been added as a "
.$pm_group_name." to the Middle Fingah Click admin system. Please find below the details required to login to the admin web panel, you will be able to access in-game admin automatically.

                        Username: [B]"
.$pm_username."[/B]
                        Password: [B]"
.$pm_password."[/B]

                        You can use this information to login into your new account at: "
.$ban_site_url."

                        It is HIGHLY recommended for security reasons that you change your password to something memorable once you login. If you have any questions please contact me or any other Manager with your query.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
        case 
1:
            
$pm_text_title="Promoted in Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        Congratulations! You have been promoted to a "
.$pm_group_name." on the ".$clan_name." admin system. Your login details are the same as before.

                        You can use this information to login into your account at: "
.$ban_site_url."/index.php?p=login

                        If you have any questions please contact me via [email protected] or PM.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
        case 
2:
            
$pm_text_title="Demoted in Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        We are afraid that you have been demoted to a "
.$pm_group_name." on the ".$clan_name." admin system. Your login details are the same as before.

                        You can use this information to login into your account at: "
.$ban_site_url."

                        If you have any questions please contact me via [email protected] or PM.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
        case 
3:
            
$pm_text_title="Removed from Sourcebans";
            
$pm_text="[CENTER][IMG]".$ban_site_url."/images/logos/sb-large.png[/IMG]
                        [/CENTER]
                        [LEFT][FONT=Garamond][SIZE=4]Hello "
.$pm_username.",

                        We are afraid that you have been removed from the "
.$clan_name." admin system. 

                        If you have any questions please contact me via [email protected] or PM.

                        Many thanks,
                        "
.$pm_from_user_text."
                        [/SIZE][/FONT][/LEFT]"
;
            break;
    }
    
$botpermissions['adminpermissions'] = 2;
    
$pmdm =& datamanager_init('PM'$vbulletinERRTYPE_ARRAY);
    
$pmdm->overridequota true;
    
$pmdm->set('fromuserid'$pm_from_userid);
    
$pmdm->set('fromusername'$pm_from_userid_text);
    
$pmdm->set_info('receipt'$vbulletin->GPC['receipt']);            //false    
    
$pmdm->set_info('savecopy'$vbulletin->GPC['savecopy']);     //false
    
$pmdm->set('allowsmilie'$vbulletin->GPC['allowsmilie']);    //true
    
$pmdm->set('title'$pm_text_title);
    
$pmdm->set('message'$pm_text);
    
$pmdm->set_recipients($pm_username$botpermissions);
    
$pmdm->set('dateline'TIMENOW);

    
$pmdm->pre_save();
    if (empty(
$pmdm->errors))
    {
            
$pmdm->save();
    }
    else
    {
        echo 
"<hr><b><font color=red>PM was not sent, Reason:</font></b><pre>";
        
print_r($pmdm->errors);
        echo 
"</pre><hr> ";
    }
    unset(
$pmdm);
}
// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################
$res $vbulletin->db->query_read("SELECT `username`, `user`.`userid` as userid, `usergroupid`, `membergroupids`, `email`, `".$steamid_custom_field."` FROM "TABLE_PREFIX ."user LEFT JOIN `"TABLE_PREFIX ."userfield` ON `user`.`userid`=`userfield`.`userid`"); //Select all users from the Vbulletin Database
while($row mysql_fetch_assoc($res))
{
    
// CLEANUP OLD/INVALID ADMINS
    
$res2 mysql_query("SELECT `aid` FROM ".DB_PREFIX."_admins WHERE user='".$row['username']."'") or die(mysql_error()); //Check if the user has a sourcebans account
    
$row2 mysql_fetch_assoc($res2);
    if (
mysql_num_rows($res2)>&& !in_array($row['usergroupid'], $groups_with_admin)) //If yes, and they are not in one of the admin groups defined above then...
    
{
        
$additionaluser=false;
        for(
$i 0$i count($user_additional_groups); $i ++) //Check if they are marked as an additional user to any of the admin groups defined above
        
{
            if (
in_array($user_additional_groups[$i], $groups_with_admin))
            {
                
$additionaluser=true;
                break;
            }
        }
        if(
$additionaluser == false// If they aren't remove them from SourceBans.
        
{
            
mysql_query("DELETE FROM ".DB_PREFIX."_admins_servers_group WHERE admin_id='".$row2['aid']."'");
            
mysql_query("DELETE FROM ".DB_PREFIX."_admins WHERE aid='".$row2['aid']."'");
            
SendPM($row['userid'], $row['username'], "None""None"3); //Send a PM telling them that they've been removed from sourcebans
        
}
    }
    
    
// PRIMARY USERGROUP ADMIN CONTROL
    
    
if (in_array($row['usergroupid'], $groups_with_admin)) //If the user is in a primary group defined as an admin, then add/edit them as such.
    
{
        switch(
$row['usergroupid']) 
        {    
                case 
6:
                    
AddAdmin(11"Leaders"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
9:
                    
AddAdmin(11"Leaders"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
10:
                    
AddAdmin(22"Head Council"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
11:
                    
AddAdmin(24"Council"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
12:
                    
AddAdmin(26"Members"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
13:
                    
AddAdmin(05"Donators"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
        }
        continue;
    }
    
    
// ADDITIONAL USERGROUP ADMIN CONTROL
    
if (strlen ($row['membergroupids']) > 0){
    
$user_additional_groups=explode(","$row['membergroupids']);
    }
    
    for(
$i 0$i count($user_additional_groups); $i ++) //If the user is in a secondary group defined as an admin, then add/edit them as such, same format as above.
    
{
        if (
in_array($user_additional_groups[$i], $groups_with_admin))
        {
            switch(
$user_additional_groups[$i]) 
            {    
                case 
6:
                    
AddAdmin(11"Leaders"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
9:
                    
AddAdmin(11"Leaders"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
10:
                    
AddAdmin(22"Head Council"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
11:
                    
AddAdmin(24"Council"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
12:
                    
AddAdmin(26"Members"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
                case 
13:
                    
AddAdmin(05"Donators"3$row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']);
                    break;
            }
            continue;
        }
    }
}
//REHASH SERVERS, DOES NOT REQUIRE EDITING
$res mysql_query("SELECT ip, port, rcon FROM ".DB_PREFIX."_servers WHERE enabled=1") or die(mysql_error());
while(
$row mysql_fetch_assoc($res))
{
    if (
strlen($row['rcon']) > 0)
    {
        
$rcon = new CServerRcon($row['ip'], $row['port'], $row['rcon']);
        if(!
$rcon->Auth())
        {
            continue;
        }
        
$rcon->rconCommand("sm_rehash");
        unset(
$rcon);
    }
}
?>
Any my cserverrcon.php
PHP Code:
<?php
/**
 * =============================================================================
 * Send and receive RCON packets
 * 
 * @author SteamFriends Development Team
 * @version 1.0.0
 * @copyright SourceBans (C)2007 SteamFriends.com.  All rights reserved.
 * @package SourceBans
 * @link http://www.sourcebans.net
 * 
 * @version $Id: CServerRcon.php 117 2008-08-21 17:17:54Z peace-maker $
 * =============================================================================
 */

class CServerRcon
{
  private 
$password;
  private 
$_sock null;
  private 
$_id 0;
  private 
$isfsock true;

  const 
SERVERDATA_EXECCOMMAND 02;
  const 
SERVERDATA_AUTH 03;
  const 
SERVERDATA_RESPONSE_VALUE 00;
  const 
SERVERDATA_AUTH_RESPONSE 02;

  function 
CServerRcon ($address$port$password)
  {
    
$this->password $password;

    try
    {
      if (
defined('BIND_IP') && function_exists('socket_create') && function_exists('socket_bind'))
      {
        
$this->isfsock false;
        
$this->_sock socket_create(AF_INETSOCK_STREAMSOL_TCP);

        
socket_set_option($this->_sockSOL_SOCKETSO_REUSEADDR1);
        
socket_bind($this->_sockBIND_IP);

        
socket_connect($this->_sock$address$port);

        
socket_set_option($this->_sockSOL_SOCKETSO_SNDTIMEO, array("sec"=>2"usec"=>0));
        
socket_set_option($this->_sockSOL_SOCKETSO_RCVTIMEO, array("sec"=>2"usec"=>0));
      }
      else
      {
        
$this->_sock = @fsockopen($address$port$errno$errstr2);
        
stream_set_timeout($this->_sock2);
      }
    }
    catch (
Exception $err) { }
  }
    
  public function 
Auth ()
  {
    
$PackID $this->_Write(CServerRcon::SERVERDATA_AUTH,$this->password);
    
$ret $this->_PacketRead();

    return (isset(
$ret[1]['ID']) && $ret[1]['ID'] == -1)?0:1;
  }

  private function 
_Write($cmd$s1=''$s2='')
  {
    
$id = ++$this->_id;
    
$data pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0);
    
$data pack("V",strlen($data)).$data;

    if (
$this->isfsock)
      
fwrite($this->_sock$datastrlen($data));
    else
      
socket_write($this->_sock$datastrlen($data));

    return 
$id;
  }

  private function 
_sock_read($size)
  {
    if (
$this->isfsock)
      return @
fread($this->_sock$size);
    else
      return 
socket_read($this->_sock$size);
  }

  private function 
_PacketRead()
  {
    
$retarray = array();

    while (
$size $this->_sock_read(4)) 
    {
      
$size unpack('V1Size',$size);

      if (
$size["Size"] > 4096)
        
$packet "\x00\x00\x00\x00\x00\x00\x00\x00".$this->_sock_read(4096);
      else 
        
$packet $this->_sock_read($size["Size"]);

      
array_push($retarray,unpack("V1ID/V1Reponse/a*S1/a*S2",$packet));
    }

    return 
$retarray;
  }

  public function 
Read()
  {
    
$Packets $this->_PacketRead();

    foreach(
$Packets as $pack
    {
      if (isset(
$ret[$pack['ID']])) 
      {
        
$ret[$pack['ID']]['S1'] .= $pack['S1'];
        
$ret[$pack['ID']]['S2'] .= $pack['S1'];
      }
      else
      {
        
$ret[$pack['ID']] = array('Reponse' => $pack['Reponse'],
                                  
'S1' => $pack['S1'],
                                  
'S2' =>    $pack['S2'],);
      }
    }

    return 
$ret;
  }

  public function 
sendCommand($command)
  {
    
//$command = '"'.trim(str_replace(' ','" "', $command)).'"';
    
$this->_Write(CServerRcon::SERVERDATA_EXECCOMMAND,$command,'');
  }

  public function 
rconCommand($command)
  {
      
$this->sendCommand($command);
      
$ret $this->Read();
      return 
$ret[2]['S1'];
  }
}

I'm running
vbulletin 4.1.3
Sourceban 1.4.8
php version 5.2.16


Any help would be greatly appreciated.
wtfaatp is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 09:09.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode