PDA

View Full Version : Setting displaygroupid and usertitle as query


Avrojet
04-18-2011, 08:31 AM
I have a php script which automatically assigns users to a usergroup and sets their default style. Now, I've been trying to make it also change the displaygroupid to the new usergroup.

When the script is run it changes the username markup (the text colour) but it does not update the user title. If I run the Maintenance task "Update User Titles and Ranks" the user title is updated to what it should be.

My question is how can I get the script to automatically set the correct user title when the script is run without having to run a global query.


if($curMemberships[0] == '')
{
$toQuery = $toAdd;
//echo $toQuery.' is the list to query in.';
//Perform the actual query
$res = $vbulletin->db->query("UPDATE user SET membergroupids = '$toQuery' WHERE userid = $userNum");
$res = $vbulletin->db->query("UPDATE user SET styleid = 124 WHERE userid = $userNum");
$res = $vbulletin->db->query("UPDATE user SET displaygroupid = '$toQuery' WHERE userid = $userNum");
//echo 'Update done. <br>';
}

Avrojet
11-24-2011, 03:27 PM
Any ideas on this?

evilthoutz
11-29-2011, 01:14 AM
You could take the code from vBulletin and make your script automatically update User Titles for you. This is just a way of doing it but you would have to modify just a little bit for it to work.

// ###################### Start update user #######################
if ($_REQUEST['do'] == 'updateuser')
{
require_once(DIR . '/includes/functions_infractions.php');

if (empty($vbulletin->GPC['perpage']))
{
$vbulletin->GPC['perpage'] = 1000;
}

echo '<p>' . $vbphrase['updating_user_info'] . '</p>';
$tmp_usergroup_cache = array();

$infractiongroups = array();
$groups = $vbulletin->db->query_read("
SELECT usergroupid, orusergroupid, pointlevel, override
FROM " . TABLE_PREFIX . "infractiongroup
ORDER BY pointlevel
");
while ($group = $vbulletin->db->fetch_array($groups))
{
$infractiongroups["$group[usergroupid]"]["$group[pointlevel]"][] = array(
'orusergroupid' => $group['orusergroupid'],
'override' => $group['override'],
);
}

$users = $db->query_read("
SELECT user.*, usertextfield.rank,
IF(user.displaygroupid=0, user.usergroupid, user.displaygroupid) AS displaygroupid
FROM " . TABLE_PREFIX . "user AS user
LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield USING (userid)
WHERE user.userid >= " . $vbulletin->GPC['startat'] . "
ORDER BY user.userid
LIMIT " . $vbulletin->GPC['perpage']
);

$finishat = $vbulletin->GPC['startat'];

while ($user = $db->fetch_array($users))
{
$userdm =& datamanager_init('User', $vbulletin, ERRTYPE_CP);
$userdm->set_existing($user);
cache_permissions($user, false);

$userdm->set_usertitle(
($user['customtitle'] ? $user['usertitle'] : ''),
false,
$vbulletin->usergroupcache["$user[displaygroupid]"],
($user['customtitle'] == 1 OR $user['permissions']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canusecustomtitle']) ? true : false,
($user['customtitle'] == 1) ? true : false
);

if ($lastpost = $db->query_first("SELECT MAX(dateline) AS dateline FROM " . TABLE_PREFIX . "post WHERE userid = $user[userid]"))
{
$lastpost['dateline'] = intval($lastpost['dateline']);
}
else
{
$lastpost['dateline'] = 0;
}

$infractioninfo = fetch_infraction_groups($infractiongroups, $user['userid'], $user['ipoints'], $user['usergroupid']);
$userdm->set('infractiongroupids', $infractioninfo['infractiongroupids']);
$userdm->set('infractiongroupid', $infractioninfo['infractiongroupid']);

$userdm->set('posts', $user['posts']); // This will activate the rank update
$userdm->set('lastpost', $lastpost['dateline']);
$userdm->save();
unset($userdm);

echo construct_phrase($vbphrase['processing_x'], $user['userid']) . "<br />\n";
vbflush();

$finishat = ($user['userid'] > $finishat ? $user['userid'] : $finishat);
}

$finishat++;

if ($checkmore = $db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE userid >= $finishat LIMIT 1"))
{
print_cp_redirect("misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=updateuser&startat=$finishat&pp=" . $vbulletin->GPC['perpage']);
echo "<p><a href=\"misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=updateuser&amp;startat=$finishat&amp;pp=" . $vbulletin->GPC['perpage'] . "\">" . $vbphrase['click_here_to_continue_processing'] . "</a></p>";
}
else
{
define('CP_REDIRECT', 'misc.php');
print_stop_message('updated_user_titles_successful ly');
}
}

// ###################### Start update usernames #######################
if ($_REQUEST['do'] == 'updateusernames')
{
if (empty($vbulletin->GPC['perpage']))
{
$vbulletin->GPC['perpage'] = 1000;
}

echo '<p>' . $vbphrase['updating_usernames'] . '</p>';
$users = $db->query_read("
SELECT *
FROM " . TABLE_PREFIX . "user
WHERE userid >= " . $vbulletin->GPC['startat'] . "
ORDER BY userid
LIMIT " . $vbulletin->GPC['perpage']
);

$finishat = $vbulletin->GPC['startat'];
while ($user = $db->fetch_array($users))
{
$userman =& datamanager_init('User', $vbulletin, ERRTYPE_SILENT);
$userman->set_existing($user);
$userman->update_username($user['userid'], $user['username']);
unset($userman);

echo construct_phrase($vbphrase['processing_x'], $user['userid']) . "<br />\n";
vbflush();

$finishat = ($user['userid'] > $finishat ? $user['userid'] : $finishat);
}

$finishat++; // move past the last processed user

if ($checkmore = $db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE userid >= $finishat LIMIT 1"))
{
print_cp_redirect("misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=updateusernames&startat=$finishat&pp=" . $vbulletin->GPC['perpage']);
echo "<p><a href=\"misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=updateusernames&amp;startat=$finishat&amp;pp=" . $vbulletin->GPC['perpage'] . "\">" . $vbphrase['click_here_to_continue_processing'] . "</a></p>";
}
else
{
define('CP_REDIRECT', 'misc.php');
print_stop_message('updated_usernames_successfully ');
}
}