View Full Version : Creating a Scheduled Task: Update User Titles and Ranks
haloamor
03-21-2014, 04:26 PM
Anybody know how I can go about creating a scheduled task to update user titles and ranks?
Thanks!
Lynne
03-21-2014, 07:11 PM
You can probably just copy one of the other tasks (in /core/includes/cron) and just delete out the middle and put in the same queries from the Update User Titles and Ranks file (/core/admincp/misc.php). Then set up a task and point to that file.
haloamor
03-22-2014, 12:16 AM
Thanks Lynne for the reply. I'm lost there.
I can't do it at the add new scheduled task area?
I have to write my own php?
Lynne
03-22-2014, 02:55 AM
No. You need to write the scheduled task first before you add it.
(You posted in the programming help forum, so I assume you know how to program?)
haloamor
03-23-2014, 03:15 PM
Let's assume I don't.
Would you be able to help?
Thanks so much!
Lynne
03-23-2014, 04:54 PM
I'd suggest taking the /cron/digestweekly.php file and renaming it. Then remove the require_once line and the exec_digest(3); line. Then you should be able to fill it in with the stuff from the misc.php file. Have you looked at that file and found the section that updates the titles and ranks?
adwade
04-05-2015, 03:06 PM
So does the update user titles and ranks function already get run once-a-week, automatically?(i.e. via digestweekly.php)
I'm no programmer either, but THANK YOU Lynne for your posts! I might be able to cobble something together from all that information.
--------------- Added 1428255496 at 1428255496 ---------------
I recently installed Paul M's Move inactive users to new usergroup (https://vborg.vbsupport.ru/showthread.php?t=201323) MOD and am looking for a way to keep my user titles accurate each day, after his mod runs nightly.
Is this code section below what needs to be copied/pasted into a new php file, for a new cron job?
Also, since I only want to run the update user titles and ranks function is there anything else in the code below I need to remove?
// ###################### 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&startat=$finishat&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');
}
}
// ###################### Finish update user #######################
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.