KGodel
02-11-2012, 07:01 PM
Hey guys!
I am using a plugin from a 3.8.x series of vBulletin on VB4 with no errors as far as it getting the job done. It's pretty simple an adds a hook when you save a user. Th plugin can be found here:
https://vborg.vbsupport.ru/showthread.php?t=157919
Now, because of how I sort usergroups (I use an HTML comment) I have altered it a bit to trim off that HTML. However, upon saving I am getting errors evaluating the "foreach" statements in the hook. I'm not expert, but if anyone could give me a hint as to what in these statement might be giving me eval() errors, that'd be great!
if ($vbulletin->GPC['userid'])
{
$usernote_message = '';
function fetch_usergroup_title($usergroupid)
{
global $vbulletin;
return $vbulletin->usergroupcache["$usergroupid"]['title'];
}
//////////// Check for Primary Group Change ////////////
if ($vbulletin->GPC['user']['usergroupid'] != $userinfo['usergroupid'])
{
$usernote_message .= construct_phrase($vbphrase['primary_group_changed_x_to_y'],substr(fetch_usergroup_title($userinfo['usergroupid']), 16),substr(fetch_usergroup_title($vbulletin->GPC['user']['usergroupid']), 16));
}
/////////// Check for Member (Secondary) Group Change ////////////
// Find NEW member group IDs (Added Member Groups)
foreach ($vbulletin->GPC['user']['membergroupids'] AS $newmembergroupid)
{
if (!in_array( $newmembergroupid, explode(',', $userinfo['membergroupids']) ) )
{
$addedmembergroupids[] = $newmembergroupid;
}
}
// Find OLD member group IDs (Removed Member Groups)
foreach (explode(',', $userinfo['membergroupids']) AS $oldmembergroupid)
{
if (intval($oldmembergroupid) AND !in_array( $oldmembergroupid, $vbulletin->GPC['user']['membergroupids'] ))
{
$removedmembergroupids[] = $oldmembergroupid;
}
}
foreach ($addedmembergroupids AS $membergroupid)
{
$usernote_message .= construct_phrase($vbphrase['added_to_secondary_group_x'],substr(fetch_usergroup_title($membergroupid), 16));
}
foreach ($removedmembergroupids AS $membergroupid)
{
$usernote_message .= construct_phrase($vbphrase['removed_from_secondary_group_x'],substr(fetch_usergroup_title($membergroupid), 16));
}
// If we have a message then something was changed, create the log entry
if ($usernote_message != '')
{
//Insert a new usernote
$db->query_write("
INSERT INTO " . TABLE_PREFIX . "usernote
(message, dateline, userid, posterid, title, allowsmilies)
VALUES ('" . $db->escape_string($usernote_message) . "', " . TIMENOW . ", ".$userinfo['userid'].", " . $vbulletin->userinfo['userid'] . ", '".$db->escape_string($vbphrase['usergroup_changed'])."', 1)
");
}
}
I am using a plugin from a 3.8.x series of vBulletin on VB4 with no errors as far as it getting the job done. It's pretty simple an adds a hook when you save a user. Th plugin can be found here:
https://vborg.vbsupport.ru/showthread.php?t=157919
Now, because of how I sort usergroups (I use an HTML comment) I have altered it a bit to trim off that HTML. However, upon saving I am getting errors evaluating the "foreach" statements in the hook. I'm not expert, but if anyone could give me a hint as to what in these statement might be giving me eval() errors, that'd be great!
if ($vbulletin->GPC['userid'])
{
$usernote_message = '';
function fetch_usergroup_title($usergroupid)
{
global $vbulletin;
return $vbulletin->usergroupcache["$usergroupid"]['title'];
}
//////////// Check for Primary Group Change ////////////
if ($vbulletin->GPC['user']['usergroupid'] != $userinfo['usergroupid'])
{
$usernote_message .= construct_phrase($vbphrase['primary_group_changed_x_to_y'],substr(fetch_usergroup_title($userinfo['usergroupid']), 16),substr(fetch_usergroup_title($vbulletin->GPC['user']['usergroupid']), 16));
}
/////////// Check for Member (Secondary) Group Change ////////////
// Find NEW member group IDs (Added Member Groups)
foreach ($vbulletin->GPC['user']['membergroupids'] AS $newmembergroupid)
{
if (!in_array( $newmembergroupid, explode(',', $userinfo['membergroupids']) ) )
{
$addedmembergroupids[] = $newmembergroupid;
}
}
// Find OLD member group IDs (Removed Member Groups)
foreach (explode(',', $userinfo['membergroupids']) AS $oldmembergroupid)
{
if (intval($oldmembergroupid) AND !in_array( $oldmembergroupid, $vbulletin->GPC['user']['membergroupids'] ))
{
$removedmembergroupids[] = $oldmembergroupid;
}
}
foreach ($addedmembergroupids AS $membergroupid)
{
$usernote_message .= construct_phrase($vbphrase['added_to_secondary_group_x'],substr(fetch_usergroup_title($membergroupid), 16));
}
foreach ($removedmembergroupids AS $membergroupid)
{
$usernote_message .= construct_phrase($vbphrase['removed_from_secondary_group_x'],substr(fetch_usergroup_title($membergroupid), 16));
}
// If we have a message then something was changed, create the log entry
if ($usernote_message != '')
{
//Insert a new usernote
$db->query_write("
INSERT INTO " . TABLE_PREFIX . "usernote
(message, dateline, userid, posterid, title, allowsmilies)
VALUES ('" . $db->escape_string($usernote_message) . "', " . TIMENOW . ", ".$userinfo['userid'].", " . $vbulletin->userinfo['userid'] . ", '".$db->escape_string($vbphrase['usergroup_changed'])."', 1)
");
}
}