$userdata['name'] );
if (isset($userdata['email']))
$vbuser['email'] = $userdata['email'];
if (isset($userdata['pass']))
$vbuser['password'] = $userdata['pass'];
return $vbuser;
}
define('REGISTERED_USERGROUP', 2); // typical default for registered users
define('PERMANENT_COOKIE', false); // false=session cookies (recommended)
define('THIS_SCRIPT', __FILE__);
$cwd = getcwd();
chdir(FORUMPATH);
require_once('./includes/init.php'); // includes class_core.php
require_once('./includes/class_dm.php'); // for class_dm_user.php
require_once('./includes/class_dm_user.php'); // for user functions
require_once('./includes/functions.php'); // vbsetcookie etc.
require_once('./includes/functions_login.php'); // process login/logout
//---------------------------------------------------------------------
// This function duplicates the functionality of fetch_userinfo(),
// using the user name instead of numeric ID as the argument.
// See comments in includes/functions.php for documentation.
//---------------------------------------------------------------------
function fetch_userinfo_from_username(&$username, $option=0, $languageid=0)
{
global $vbulletin;
$useridq = $vbulletin->db->query_first_slave("SELECT userid FROM "
. TABLE_PREFIX . "user WHERE username='{$username}'");
if (!$useridq) return $useridq;
$userid = $useridq['userid'];
return fetch_userinfo($userid, $option, $languageid);
}
//---------------------------------------------------------------------
// CLASS ForumOps
//---------------------------------------------------------------------
class ForumOps extends vB_DataManager_User {
var $userdm;
// *********************************************************************************************************
function __construct( &$vbulletin ) // constructor
{
$this->vbulletin =& $vbulletin;
$this->userdm =& datamanager_init('user', $vbulletin, ERRTYPE_ARRAY);
}
function ForumOps() // constructor
{
global $vbulletin;
$this->userdm =& datamanager_init('User', $vbulletin, ERRTYPE_ARRAY);
}
// *********************************************************************************************************
//======== USER REGISTRATION / UPDATE / DELETE ========
function register_newuser(&$userdata, $login = true)
{
global $vbulletin;
$vbuser = userdata_convert($userdata);
foreach($vbuser as $key => $value)
$this->userdm->set($key, $value);
$this->userdm->set('usergroupid', REGISTERED_USERGROUP);
$this->userdm->set('timezoneoffset', 1);
// Bitfields; set to desired defaults.
// Comment out those you have set as defaults
// in the vBuleltin admin control panel
$this->userdm->set_bitfield('options', 'adminemail', 1);
$this->userdm->set_bitfield('options', 'showsignatures', 1);
$this->userdm->set_bitfield('options', 'showavatars', 0);
$this->userdm->set_bitfield('options', 'showimages', 1);
$this->userdm->set_bitfield('options', 'showemail', 0);
if ($login) $this->login($vbuser);
//$this->userdm->errors contains error messages
if (empty($this->userdm->errors))
$vbulletin->userinfo['userid'] = $this->userdm->save();
else
return implode('
', $this->userdm->errors);
return NULL;
}
// *********************************************************************************************************
function update_user(&$userdata)
{
global $vbulletin;
$vbuser = userdata_convert($userdata);
if (!($existing_user = fetch_userinfo_from_username($vbuser['username'])))
return 'fetch_userinfo_from_username() failed.';
$this->userdm->set_existing($existing_user);
foreach($vbuser as $key => $value)
$this->userdm->set($key, $value);
// reset password cookie in case password changed
if (isset($vbuser['password']))
vbsetcookie('password',
md5($vbulletin->userinfo['password'].COOKIE_SALT),
PERMANENT_COOKIE, true, true);
if (count($this->userdm->errors))
return implode('
', $this->userdm->errors);
$vbulletin->userinfo['userid'] = $this->userdm->save();
return NULL;
}
// *********************************************************************************************************
function update_avatar(&$userdata) {
global $vbulletin;
$vbuser = userdata_convert($userdata);
if (!($existing_user = fetch_userinfo_from_username($vbuser['username'])))
return 'fetch_userinfo_from_username() failed.';
$this->userdm->set_existing($existing_user);
// update avatar in case it should be
if (!empty($vbuser['avatarurl'])) {
//~ echo"
"; //~ print_r ($existing_user); //~ echo ""; // begin custom avatar code require_once(DIR . '/includes/class_upload.php'); require_once(DIR . '/includes/class_image.php'); $upload = new vB_Upload_Userpic($vbulletin); $upload->data =& datamanager_init('Userpic_Avatar', $vbulletin, ERRTYPE_STANDARD, 'userpic'); $upload->image =& vB_Image::fetch_library($vbulletin); $upload->userinfo =& $existing_user; cache_permissions($existing_user, false); $upload->maxwidth = $vbulletin->userinfo['permissions']['avatarmaxwidth']; $upload->maxheight = $vbulletin->userinfo['permissions']['avatarmaxheight']; if (!$upload->process_upload($vbuser['avatarurl'])) { echo $upload->fetch_error(); } } else { // no avatar used! $userpic =& datamanager_init('Userpic_Avatar', $vbulletin, ERRTYPE_CP, 'userpic'); $userpic->condition = "userid = " . $existing_user['userid']; $userpic->delete(); } $this->userdm->set_existing($vbulletin->userinfo); ($hook = vBulletinHook::fetch_hook('profile_updateavatar_complete')) ? eval($hook) : false; return NULL; } // ********************************************************************************************************* function delete_user(&$username) { // The vBulletin documentation suggests using userdm->delete() // to delete a user, but upon examining the code, this doesn't // delete everything associated with the user. The following // is adapted from admincp/user.php instead. // NOTE: THIS MAY REQUIRE MAINTENANCE WITH NEW VBULLETIN UPDATES. global $vbulletin; $db = &$vbulletin->db; $userdata = $db->query_first_slave("SELECT userid FROM " . TABLE_PREFIX . "user WHERE username='{$username}'"); $userid = $userdata['userid']; if ($userid) { // from admincp/user.php 'do prune users (step 1)' // delete subscribed forums $db->query_write("DELETE FROM " . TABLE_PREFIX . "subscribeforum WHERE userid={$userid}"); // delete subscribed threads $db->query_write("DELETE FROM " . TABLE_PREFIX . "subscribethread WHERE userid={$userid}"); // delete events $db->query_write("DELETE FROM " . TABLE_PREFIX . "event WHERE userid={$userid}"); // delete event reminders $db->query_write("DELETE FROM " . TABLE_PREFIX . "subscribeevent WHERE userid={$userid}"); // delete custom avatars $db->query_write("DELETE FROM " . TABLE_PREFIX . "customavatar WHERE userid={$userid}"); $customavatars = $db->query_read("SELECT userid, avatarrevision FROM " . TABLE_PREFIX . "user WHERE userid={$userid}"); while ($customavatar = $db->fetch_array($customavatars)) { @unlink($vbulletin->options['avatarpath'] . "/avatar{$customavatar['userid']}_{$customavatar['avatarrevision']}.gif"); } // delete custom profile pics $db->query_write("DELETE FROM " . TABLE_PREFIX . "customprofilepic WHERE userid={$userid}"); $customprofilepics = $db->query_read( "SELECT userid, profilepicrevision FROM " . TABLE_PREFIX . "user WHERE userid={$userid}"); while ($customprofilepic = $db->fetch_array($customprofilepics)) { @unlink($vbulletin->options['profilepicpath'] . "/profilepic$customprofilepic[userid]_$customprofilepic[profilepicrevision].gif"); } // delete user forum access $db->query_write("DELETE FROM " . TABLE_PREFIX . "access WHERE userid={$userid}"); // delete moderator $db->query_write("DELETE FROM " . TABLE_PREFIX . "moderator WHERE userid={$userid}"); // delete private messages $db->query_write("DELETE FROM " . TABLE_PREFIX . "pm WHERE userid={$userid}"); $db->query_write("DELETE FROM " . TABLE_PREFIX . "pmreceipt WHERE userid={$userid}"); $db->query_write("DELETE FROM " . TABLE_PREFIX . "session WHERE userid={$userid}"); // delete user group join requests $db->query_write("DELETE FROM " . TABLE_PREFIX . "usergrouprequest WHERE userid={$userid}"); // delete bans $db->query_write("DELETE FROM " . TABLE_PREFIX . "userban WHERE userid={$userid}"); // delete user notes $db->query_write("DELETE FROM " . TABLE_PREFIX . "usernote WHERE userid={$userid}"); // from admincp/users.php 'do prune users (step 2)' // update deleted user's posts with userid=0 $db->query_write("UPDATE " . TABLE_PREFIX . "thread SET postuserid = 0, postusername = '" . $db->escape_string($username) . "' WHERE postuserid = $userid"); $db->query_write("UPDATE " . TABLE_PREFIX . "post SET userid = 0, username = '" . $db->escape_string($username) . "' WHERE userid = $userid"); // finally, delete the user $db->query_write("DELETE FROM " . TABLE_PREFIX . "usertextfield WHERE userid={$userid}"); $db->query_write("DELETE FROM " . TABLE_PREFIX . "userfield WHERE userid={$userid}"); $db->query_write("DELETE FROM " . TABLE_PREFIX . "user WHERE userid={$userid}"); } /* the following is suggested in the documentation but doesn't work: $existing_user = fetch_userinfo_from_username($username); $this->userdm->set_existing($existing_user); return $this->userdm->delete(); */ } function set_email( $username, $email ) { global $vbulletin; $db = &$vbulletin->db; $db->query_write("UPDATE " . TABLE_PREFIX . "user SET email = '" .mysql_real_escape_string($email)."' WHERE username = '" .mysql_real_escape_string($username)."'" ); } function set_pass( $username, $pass ) { global $vbulletin; $db = &$vbulletin->db; $pass = md5($pass); $salt = $this->fetch_user_salt(); $db->query_write("UPDATE " . TABLE_PREFIX . "user SET password = '" .mysql_real_escape_string(md5($pass.$salt))."', salt = '".mysql_real_escape_string($salt)."' WHERE username = '" .mysql_real_escape_string($username)."'" ); } function fetch_user_salt($length = SALT_LENGTH) { $salt = ''; for ($i = 0; $i < $length; $i++) { $salt .= chr(rand(33, 126)); } return $salt; } // ======== USER LOGIN / LOGOUT ======== function login($vbuser) { global $vbulletin; $vbulletin->userinfo = fetch_userinfo_from_username($vbuser['username']); // set cookies vbsetcookie('userid', $vbulletin->userinfo['userid'], PERMANENT_COOKIE, true, true); vbsetcookie('password', md5($vbulletin->userinfo['password'].COOKIE_SALT), PERMANENT_COOKIE, true, true); // create session stuff process_new_login('', 1, ''); } function logout() { process_logout(); // unsets all cookies and session data } } // end class ForumOps chdir($cwd); ?>