PDA

View Full Version : Update User Titles and Ranks


manguish
11-01-2006, 05:59 PM
As posted Here (http://www.vbulletin.com/forum/showthread.php?t=206975)

As a cron job?

i have members coming in and out of subscribed member groups. Once the subscribe, they join the "premium" usergroup.

When this expires, i require the rank to be removed.

I have set the rank to be if = to this usergroup, but so far, the only way to do it is to run the update user ranks and titles in maintenance.

how would i run a cron to do this when my subscription cron runs?

manguish
11-03-2006, 05:03 PM
Anyone please?

manguish
11-07-2006, 05:20 PM
I guess for the right code, i could even cough up some paypal for the right person....

I'm struggling with this one. :/

SCRIPT3R
11-07-2006, 05:29 PM
setup a cron for this... admincp/misc.php?do=updateuser


<?php

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
if (!is_object($vbulletin->db))
{
exit;
}

// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
require_once(DIR . '/includes/functions_databuild.php');

// ############################# LOG ACTION ###############################
log_admin_action();

// ################################################## ######################
// ######################### START MAIN SCRIPT ############################
// ################################################## ######################

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

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

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

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'] . " AND user.userid < $finishat
ORDER BY user.userid
");
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();
}

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');
}
}

?>


oh wait... i hadn't noticed you were using vB 3.0... the above is for vB 3.6 - i'm not familiar with dbase calls prior to vB 3.5 - sorry.

manguish
11-07-2006, 05:46 PM
I'm actually in 3.5.5 - but that may give me a start ;)

SCRIPT3R
11-07-2006, 05:48 PM
i'm thinking it should work fine for 3.5.5... just create a new php file and place it into your includes/cron directory and runwith your cron setup.

Criticize
12-05-2007, 12:57 PM
Can you please explain this a little more in depth? I am trying to do this as well on my forum and need some help. I need to update user titles and ranks that have been changed but not ALL users, only users who have made changes etc.

Any help GearTripper? Thanks a ton.

RedTurtle
02-18-2011, 10:03 PM
Has anyone else figured out how to make this work? I keep getting an error trying to run this on 3.6.5.

The error is:

Warning: include_once(/home/user/public_html/./admincp/misc.php?do=updateuser) [function.include ("]function.include-once[/URL]]: failed to open stream: No such file or directory in /admincp/cronadmin.php on line 108

Warning: include_once() [[URL=")]: Failed opening '/home/user/public_html/./admincp/misc.php?do=updateuser' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /admincp/cronadmin.php on line 108


Really trying to find a way to automate via the scheduler running the update user title and rank counter every night.

Could anyone please help? THANK YOU.

kh99
02-19-2011, 01:45 AM
I don't quite understand what SCRIPT3R was suggesting, but it seems like if you're going to put that code in a separate php file in the includes/cron directory, then you might as well take out the if ($_REQUEST['do'] == 'updateuser') (and the associate curly braces) and then take the "?do=updateuser" off the name of the file (you probably also would want to name it something more meaningful than "misc.php").

Also, I'm not sure but I think you may have to edit that code some - it looks like maybe SCRIPT3R was just showing which code to use from the admincp code, but it looks like it might have trouble running as a cron job the way it is.