PDA

View Full Version : Update Users


Tyluur
07-28-2013, 04:15 AM
I am adding members with sql only, and that being said the counter on the bottom of forum.php does not update, and neither does the newest member. I have ran a few tests and the option "Update User Names" in "General Update Tools" fixes this. How would I run a task for this every 15 minutes or so?

This is what is done to update the users:

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

kh99
07-30-2013, 01:04 PM
I think you just need to call the function build_user_statistics(), which is in includes/function_databuild.php. I don't understand exactly what that update username function does, but I'm guessing that the reason it works for you is because the user dm calls build_user_statistics() at some point.

If you wanted to have it run periodically you could create a scheduled task. Look at the files in includes/cron, find a simple example, and copy it to a new file name. The code just needs to include includes/function_databuild.php and call build_user_statistics(). Then you can use the Schedule Task manager to add a new scheduled task and specify your new php file as the file to run.

If you could live with it running only once per hour you could create a plugin using hook cron_script_cleanup_hourly, which is run from the existing "Hourly Cleanup" task.