* @package AgileBill * @version 1.4.93 */ define('VB3_COOKIE_PREFIX', 'bb'); ################################################################################ ### Database Map for: vBulletin 3.x ################################################################################ class map_VBULLETIN_3 { ############################################################################ ### Define the settings for this database map ############################################################################ function map_VBULLETIN_3 () { $this->map = Array ( 'map' => 'vBulletin_3', 'db_type' => 'mysql', 'notes' => 'This is for vBulletin 3', 'group_type' => 'db-status', // db, db-status, status, none ### Define the group fields in the target db 'group_map' => Array ( 'table' => 'usergroup', 'id' => 'usergroupid', 'name' => 'title' ), ### Define the account mapping properties 'account_map_field' => 'user', 'account_status_field' => 'usergroupid', 'account_default_status' => '2', 'account_sync_field'=> Array ( 'add' => 'username,email,password', 'edit' => 'username,email,password', 'import' => 'username,email,password', 'export' => 'username,email,password', 'delete' => '1' ), 'account_fields' => Array ( 'id' => Array ( 'map_field' => 'userid' ), 'date_orig' => Array ( 'map_field' => 'joindate' ), 'date_last' => Array ( 'map_field' => 'lastactivity' ), 'date_expire' => Array ( 'map_field' => false ), 'language_id' => Array ( 'map_field' => false ), 'country_id' => Array ( 'map_field' => false ), 'username' => Array ( 'map_field' => 'username' ), 'password' => Array ( 'map_field' => 'password' ), 'misc' => Array ( 'map_field' => false ), 'first_name' => Array ( 'map_field' => false, ), 'last_name' => Array ( 'map_field' => false, ), 'middle_name' => Array ( 'map_field' => false ), 'company' => Array ( 'map_field' => false ), 'status' => Array ( 'map_field' => false ), 'email' => Array ( 'map_field' => 'email' ), 'email_type' => Array ( 'map_field' => false ) ), ### Define any extra fields for account table in the target db: 'extra_field' => Array ( 0 ) ); } ######################################################################## ### Syncronize all accounts & groups ######################################################################## function sync($id, $file) { $db_map = new db_mapping; $db_map->MAP_sync ($id, $file, $this); } ######################################################################## ### Create a new account in the target DB ######################################################################## function account_add($account_id) { $db_map_misc = new dbmapping_vb3; $db_map_misc->MAP_account_add ($account_id, $this); ### Sync the groups for this account: $remote_account_id = $this->account_group_sync( $account_id ); } ######################################################################## ### Edit an existing account in the target DB ######################################################################## function account_edit($account_id, $old_username) { $db_map_misc = new dbmapping_vb3; $db_map_misc->MAP_account_edit ($account_id, $old_username, $this); ### Update the groups in the remote db $this->account_group_sync($account_id); } ######################################################################## ### Delete an existing account from the target DB ######################################################################## function account_delete($account_id, $username) { $db_map_misc = new dbmapping_vb3; $db_map_misc->MAP_account_delete ($account_id, $username, $this); /* $db_map = new db_mapping; $remote_account_id = $db_map->MAP_account_delete ($account_id, $username, $this); ### Update the remote account: $dbm = new db_mapping; $db2 = $dbm->DB_connect(false, $this->map['map']); eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($this->map['map']) .';' ); $sql = "DELETE FROM " . $db_prefix . "userfield WHERE userid = " . $db2->qstr($remote_account_id); $db2->Execute($sql); $sql = "DELETE FROM " . $db_prefix . "usertextfield WHERE userid = " . $db2->qstr($remote_account_id); $db2->Execute($sql); */ } ######################################################################## ### Export / Update all accounts / groups to the target DB ######################################################################## function account_import($remote_account_id) { $msg = 'Import from VB3 not supported due to the unique password encryption used in VB3'; global $C_debug; $C_debug->alert($msg); } ######################################################################## ### Create the cookie/session for login sync ######################################################################## function login($account_id, $cookie) { $db_map_misc = new dbmapping_vb3; $db_map_misc->MAP_account_login ($account_id, $cookie, $this); } ######################################################################## ### Delete the cookie/session on account logout ######################################################################## function logout($account_id, $cookie) { $db_map_misc = new dbmapping_vb3; $db_map_misc->MAP_account_logout ($account_id, $cookie, $this); } ######################################################################## ### Syncronize the groups for a specific account in the remote DB ######################################################################## function account_group_sync($account_id) { if ( $this->map['group_type'] == 'db') { $db_map = new db_mapping; return $db_map->MAP_account_group_sync_db ($account_id, $this); } elseif ( $this->map['group_type'] == 'status') { $db_map = new db_mapping; return $db_map->MAP_account_group_sync_status ($account_id, $this); } elseif ( $this->map['group_type'] == 'db-status') { $db_map = new db_mapping; return $db_map->MAP_account_group_sync_db_status ($account_id, $this); } else { return false; } } } class dbmapping_vb3 extends db_mapping { ### ADD ACCOUNT function MAP_account_add ($account_id, $MAP_this) { ### Get the account details from AB $db = &DB(); $sql= 'SELECT username,email,password FROM '.AGILE_DB_PREFIX.'account WHERE id = '.$db->qstr($account_id).' AND site_id = '.$db->qstr(DEFAULT_SITE); $account = $db->Execute($sql); if ($account === false) { global $C_debug; $C_debug->error('db_mapping.inc.php','Map_account_login_get_account_username', $db->ErrorMsg()); } unset($db); # GENERATE SALT: $salt = ''; for ($i = 0; $i < 3; $i++) $salt .= chr(rand(32, 126)); $username = $account->fields['username']; $email = $account->fields['email']; $password = md5( $account->fields['password'] . $salt ); /* # GENERATE PASSWORD: if(!empty($MAP_this->plaintext_password)) $password = md5(md5(@$MAP_this->plaintext_password) . $salt); else $password = md5( $account->fields['password'] . $salt ); */ ### Insert the new account into VB3 $dbm = new db_mapping; $dbm = $dbm->DB_connect(false, $MAP_this->map['map']); eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' ); $sql = 'INSERT INTO ' . $db_prefix . 'user SET displaygroupid = '.$dbm->qstr(0) . ', username = '.$dbm->qstr($username) . ', password = '.$dbm->qstr($password) . ', passworddate = '.$dbm->qstr(date("Y-m-d")) . ', email = '.$dbm->qstr($email) . ', styleid = '.$dbm->qstr(0) . ', showvbcode = '.$dbm->qstr(2) . ', customtitle = '.$dbm->qstr(0) . ', joindate = '.$dbm->qstr(time()) . ', daysprune = '.$dbm->qstr(0) . ', lastvisit = '.$dbm->qstr(time()) . ', lastactivity = '.$dbm->qstr(time()) . ', reputationlevelid = '.$dbm->qstr(1) . ', options = '.$dbm->qstr('2135') . ', salt = '.$dbm->qstr($salt) ; $result = $dbm->Execute($sql); if ($result === false) { global $C_debug; $C_debug->error('db_mapping.inc.php','Map_account_login_get_remote_account_id', $dbm->ErrorMsg()); return false; } } ### EDIT ACCOUNT function MAP_account_edit($account_id, $old_username, $MAP_this) { ### Get the account details from AB $db = &DB(); $sql= 'SELECT username,email,password FROM '.AGILE_DB_PREFIX.'account WHERE id = '.$db->qstr($account_id).' AND site_id = '.$db->qstr(DEFAULT_SITE); $account = $db->Execute($sql); if ($account === false) { global $C_debug; $C_debug->error('db_mapping.inc.php','Map_account_login_get_account_username', $db->ErrorMsg()); } unset($db); # GENERATE SALT: $salt = ''; for ($i = 0; $i < 3; $i++) $salt .= chr(rand(32, 126)); $username = $account->fields['username']; $email = $account->fields['email']; $password = md5( $account->fields['password'] . $salt ); /* if(!empty($MAP_this->plaintext_password)) { $password = md5(md5($MAP_this->plaintext_password) . $salt); } else { $password = md5( $account->fields['password'] . $salt ); } */ ### Update the account in VB3 $dbm = new db_mapping; $dbm = $dbm->DB_connect(false, $MAP_this->map['map']); eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' ); $sql = 'UPDATE ' . $db_prefix . 'user SET '; if(@$MAP_this->plaintext_password != false) $sql .= ' password = '.$dbm->qstr($password) . ', salt = '.$dbm->qstr($salt) . ','; $sql .= ' passworddate = '.$dbm->qstr(date("Y-m-d")) . ', username = '.$dbm->qstr($username) . ', email = '.$dbm->qstr($email) . ' WHERE username = '.$dbm->qstr($old_username) ; $result = $dbm->Execute($sql); if ($result === false) { global $C_debug; $C_debug->error('db_mapping.inc.php','Map_account_login_get_remote_account_id', $dbm->ErrorMsg()); return false; } } function MAP_account_delete ($account_id, $username, $MAP_this) { global $C_debug; ### Get the remote account id from the username $dbm = new db_mapping; $db2 = $dbm->DB_connect(false, $MAP_this->map['map']); eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' ); $sql = 'SELECT userid FROM ' . $db_prefix . 'user WHERE username = '.$db2->qstr($username); $result = $db2->Execute($sql); if ($result === false) { $C_debug->error('vBulletin_3.php','MAP_account_delete (1)', $db2->ErrorMsg() . ' ' . $sql); return false; } $vb_user_id = $result->fields['userid']; # Suspend the user user: $sql = "UPDATE " . $db_prefix . "user SET usergroupid = '1' WHERE userid = " . $db2->qstr($vb_user_id); $result = $db2->Execute($sql); if ($result === false) { $C_debug->error('vBulletin_3.php','MAP_account_delete (2)', $db2->ErrorMsg() . ' ' . $sql); } } ### LOGIN function MAP_account_login ($account_id, $cookie, $MAP_this) { ### Get the username from the account_id $db = &DB(); $sql= 'SELECT username,password FROM '.AGILE_DB_PREFIX.'account WHERE id = '.$db->qstr($account_id).' AND site_id = '.$db->qstr(DEFAULT_SITE); $result = $db->Execute($sql); if ($result === false) { global $C_debug; $C_debug->error('db_mapping.inc.php','Map_account_login_get_account_username', $db->ErrorMsg()); } unset($db); $username = $result->fields['username']; $password = $result->fields['username']; ### Get the remote account id from the username $dbm = new db_mapping; $dbm = $dbm->DB_connect(false, $MAP_this->map['map']); eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' ); $sql = 'SELECT userid,password FROM ' . $db_prefix . 'user WHERE username = '.$dbm->qstr($username); $result = $dbm->Execute($sql); if ($result === false) { global $C_debug; $C_debug->error('db_mapping.inc.php','Map_account_login_get_remote_account_id', $dbm->ErrorMsg()); return false; } $vb_user_id = $result->fields['userid']; $password = $result->fields['password']; if (!empty($vb_user_id)) { # GENERATE COOKIES FOR LOGIN setcookie(VB3_COOKIE_PREFIX.'userid', $vb_user_id, 0, '/'); setcookie(VB3_COOKIE_PREFIX.'password', md5($password . trim($cookie)), 0, '/'); setcookie(VB3_COOKIE_PREFIX.'lastactivity', time(), 0, '/'); } } ### LOGOUT function MAP_account_logout ($account_id, $cookie, $MAP_this) { setcookie(VB3_COOKIE_PREFIX.'userid' ); setcookie(VB3_COOKIE_PREFIX.'password' ); setcookie(VB3_COOKIE_PREFIX.'lastactivity' ); setcookie(VB3_COOKIE_PREFIX.'lastvisit' ); setcookie(VB3_COOKIE_PREFIX.'sessionhash' ); } } ?>