Jump to content

Vbulletin, Sourcebans 1.4 Connection


Stonewall1975

Recommended Posts

Hey Ya'll I'm looking for help on making this actually work...

The code was thrown together a couple tears ago and post'ed on both alliedmods and vbulletin forums..

 

As far as I know I have yet to find someone fix and make it work properly..

I would be willing to donate a small sum if someone would be willing to help me get this working...

 

Two things that need to be changed with the current code is -

 

The steam id is not sorted in the userfield table.. It is now stored in the user table under steam_code

 

I have a forum and a sb DB up and available for testing if needed..

 

The code I'm pasting a re-work.. The one attached is the original... I would like either working.. I just need it working!!!!

<?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($code, 0, $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(; // 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, $password, 0); //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, $password, 1); //Tell the user that they have been promoted in sourcebans. 
        } 
        elseif ($sourcebans_group_server < $row2['group_id']) 
        { 
            SendPM($userid, $username, $sourcebans_group_server_name, $password, 2); //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] 
                        [/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] 
                        [/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] 
                        [/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] 
                        [/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', $vbulletin, ERRTYPE_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)>0 && !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(1, 1, "Leaders", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 18: 
                AddAdmin(1, 2, "Vice-Founders", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 15: 
                AddAdmin(2, 3, "H-Exec", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 17: 
                AddAdmin(2, 4, "Admins", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 13: 
                AddAdmin(2, 6, "Members", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 19: 
                AddAdmin(2, 5, "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(1, 1, "Leaders", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 18: 
                AddAdmin(1, 2, "Vice-Founders", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 15: 
                AddAdmin(2, 3, "H-Exec", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 17: 
                AddAdmin(2, 4, "Admins", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 13: 
                AddAdmin(2, 6, "Members", 1, $row['username'], $row['email'], $row[$steamid_custom_field], $row['userid']); 
                break; 
            case 19: 
                AddAdmin(2, 5, "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); 
    } 
} 
?>

vbulletintosourcebans.php.txt

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.