PDA

View Full Version : could someone take a look at this script?


AK Houston
11-27-2011, 06:17 AM
can someone look at this script and explain or show why the Gold member users only see the default color in the postbit?

global $vbulletin;

/// NOTE - Make sure that the $user information includes the MembergroupIDs
if (!array_key_exists('membergroupids', $user) || !array_key_exists('usergroupid', $user))
{
global $vbulletin;
$tempuser = $vbulletin->db->query_first(sprintf("SELECT usergroupid,membergroupids FROM " . TABLE_PREFIX . "user WHERE userid=%d",$user['userid']));
$user['membergroupids'] = $tempuser['membergroupids'];
$user['membergroupids'] .= ','.$tempuser['usergroupid'];
}
else
{
$user['membergroupids'] .= ','.$user['usergroupid'];
}


if (in_array(24,explode(',',$user['membergroupids'])))
{
/// NOTE - Make sure that the $user information includes the field we are checking for
if (!array_key_exists('field16', $user))
{
global $vbulletin;
$tempuserfield = $vbulletin->db->query_first(sprintf("SELECT field16 FROM " . TABLE_PREFIX . "userfield WHERE userid=%d",$user['userid']));
$user['field16'] = $tempuserfield['field16'];
}
$my_special_color = ($user['field16']) ? $user['field16'] : 'olive';
$user['musername'] = '<span style="display:-moz-inline-stack;display:inline-block;font-weight:bold;color:'.$my_special_color.';">'.$user['username'].'</span>';
if (strtolower($my_special_color) == 'rainbow')
{
$len = 16;
$base='123456789abcdefghijklmnopqrstuvwxyzABCDEFGH IJKLMNOPQRSTUVWXYZ';
$max=strlen($base)-1;
$randstr='';
mt_srand((double)microtime()*1000000);
while (strlen($randstr)<$len+1) {$randstr .= $base[mt_rand(0,$max)];}
$user['musername'] = '
<span id="spastic_username_container_'.$randstr.'">' . $user['username'] . '</span>
<script type="text/javascript">
set_as_spastic(document.getElementById(\'spastic_u sername_container_'.$randstr.'\'),\''.$user['username'].'\');
</script>';
}
}

administrators see everyones name correctly the way the color should be. on the other hand, gold members and registered users, etc. users that dont have an admincp or modcp see the username with the people with the plugin as the default color. in this case "olive" and gold member usergroup id "24"
and i get a database error on the "who's online" page for those users
and the product "vsa - advanced forum statistics" does not show up for those users.

could someone help me?

thanks, Houston

kh99
12-01-2011, 10:30 PM
I can't see anything wrong in what's posted - is this a plugin? Which hook?

AK Houston
12-01-2011, 10:37 PM
I can't see anything wrong in what's posted - is this a plugin? Which hook?


yes its a hook. its a fetch_musername

kh99
12-01-2011, 11:06 PM
OK, looks like the problem is that you're changing $user['membergroupids'] and messing up some stuff that tries to use it later (a reference is passed to the function so any changes will affect the variable that's passed to fetch_musername() even after it returns).

So I would make these changes (lines in blue added, lines in red can be deleted):

global $vbulletin;

/// NOTE - Make sure that the $user information includes the MembergroupIDs
if (!array_key_exists('membergroupids', $user) || !array_key_exists('usergroupid', $user))
{
global $vbulletin;
$tempuser = $vbulletin->db->query_first(sprintf("SELECT usergroupid,membergroupids FROM " . TABLE_PREFIX . "user WHERE userid=%d",$user['userid']));
$user['membergroupids'] = $tempuser['membergroupids'];
$user['usergroupid'] = $tempuser['usergroupid'];
//$user['membergroupids'] .= ','.$tempuser['usergroupid'];
}
//else
//{
// $user['membergroupids'] .= ','.$user['usergroupid'];
//}


//if (in_array(24,explode(',',$user['membergroupids'])))
if (is_member_of($user, 24))
{




but I'm not sure that fixes everything. I noticed "rainbow" didn't seem to work, and I don't know why the problems only happened with non-admin or mod users.

AK Houston
12-02-2011, 09:53 PM
OK, looks like the problem is that you're changing $user['membergroupids'] and messing up some stuff that tries to use it later (a reference is passed to the function so any changes will affect the variable that's passed to fetch_musername() even after it returns).

So I would make these changes (lines in blue added, lines in red can be deleted):

global $vbulletin;

/// NOTE - Make sure that the $user information includes the MembergroupIDs
if (!array_key_exists('membergroupids', $user) || !array_key_exists('usergroupid', $user))
{
global $vbulletin;
$tempuser = $vbulletin->db->query_first(sprintf("SELECT usergroupid,membergroupids FROM " . TABLE_PREFIX . "user WHERE userid=%d",$user['userid']));
$user['membergroupids'] = $tempuser['membergroupids'];
$user['usergroupid'] = $tempuser['usergroupid'];
//$user['membergroupids'] .= ','.$tempuser['usergroupid'];
}
//else
//{
// $user['membergroupids'] .= ','.$user['usergroupid'];
//}


//if (in_array(24,explode(',',$user['membergroupids'])))
if (is_member_of($user, 24))
{




but I'm not sure that fixes everything. I noticed "rainbow" didn't seem to work, and I don't know why the problems only happened with non-admin or mod users.

well that fixes that problem :)

now its just that in the post bit, if I'm a regular member, i see all the people who have a colored name just the default color. 'olive'

how do i make it where they can see everyones individual color?

kh99
12-02-2011, 10:37 PM
how do i make it where they can see everyones individual color?

I don't have that problem on my test forum - admins and Registered Users are able to see special colors, as long as the user with the color is a member of the special group. You're going to have to put in some debug lines to see if you can figure out what's going on (like maybe echo() some values to an html comment and then view the page source to see them).