I'm doing this from the code in the admincp that rebuilds user reputations and I haven't tested it, but:
Code:
$userid = X; // set to userid you want to recalculate
$user = $db->query_read_first("
SELECT SUM(reputation.reputation) AS totalrep
FROM " . TABLE_PREFIX . "reputation AS reputation
WHERE reputation.userid = $userid
GROUP BY reputation.userid
");
$reputation = $vbulletin->options['reputationdefault'];
if (!empty($user))
{
$reputation += $user['totalrep'];
}
$db->query_write("
UPDATE " . TABLE_PREFIX . "user
SET reputation = $reputation
");
require_once(DIR . '/includes/adminfunctions_reputation.php');
$count = 1;
$reputations = $db->query_read("
SELECT reputationlevelid, minimumreputation
FROM " . TABLE_PREFIX . "reputationlevel
ORDER BY minimumreputation
");
while ($reputation = $db->fetch_array($reputations))
{
$ourreputation[$count]['value'] = $reputation['minimumreputation'];
$ourreputation[$count]['index'] = $reputation['reputationlevelid'];
$count++;
}
if ($count > 1)
{
$sql = fetch_event_recurrence_sql($ourreputation);
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "user
SET reputationlevelid = $sql
WHERE userid = $userid
");
}
else
{
// it seems we have deleted all of our reputation levels??
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "user
SET reputationlevelid = 0
WHERE userid = $userid
");
}