Codice PHP:
function updateMemberData($members, $data)
{
global $db_prefix, $modSettings, $ID_MEMBER, $user_info;
if (is_array($members))
$condition = 'ID_MEMBER IN (' . implode(', ', $members) . ')
LIMIT ' . count($members);
elseif ($members === null)
$condition = '1';
else
$condition = 'ID_MEMBER = ' . $members . '
LIMIT 1';
if (isset($modSettings['integrate_change_member_data']) && function_exists($modSettings['integrate_change_member_data']))
{
// Only a few member variables are really interesting for integration.
$integration_vars = array(
'memberName',
'realName',
'emailAddress',
'ID_GROUP',
'gender',
'birthdate',
'websiteTitle',
'websiteUrl',
'location',
'hideEmail',
'timeFormat',
'timeOffset',
'avatar',
'lngfile',
);
$vars_to_integrate = array_intersect($integration_vars, array_keys($data));
// Only proceed if there are any variables left to call the integration function.
if (count($vars_to_integrate) != 0)
{
// Fetch a list of memberNames if necessary
if ((!is_array($members) && $members === $ID_MEMBER) || (is_array($members) && count($members) == 1 && in_array($ID_MEMBER, $members)))
$memberNames = array($user_info['username']);
else
{
$memberNames = array();
$request = db_query("
SELECT memberName
FROM {$db_prefix}members
WHERE $condition", __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($request))
$memberNames[] = $row['memberName'];
mysql_free_result($request);
}
if (!empty($memberNames))
foreach ($vars_to_integrate as $var)
call_user_func($modSettings['integrate_change_member_data'], $memberNames, $var, stripslashes($data[$var]));
}
}
foreach ($data as $var => $val)
{
if ($val === '+')
$data[$var] = $var . ' + 1';
elseif ($val === '-')
$data[$var] = $var . ' - 1';
}
// Ensure posts, instantMessages, and unreadMessages never go below 0.
foreach(array('posts', 'instantMessages', 'unreadMessages') as $type)
if (isset($data[$type]) && preg_match('~^' . $type . ' - ([\d]+)~', $data[$type], $match) === 1)
$data[$type] = 'CASE WHEN ' . $type . ' <= ' . $match[1] . ' THEN 0 ELSE ' . $data[$type] . ' END';
$setString = '';
foreach ($data as $var => $val)
{
$setString .= "
$var = $val,";
}
db_query("
UPDATE {$db_prefix}members
SET" . substr($setString, 0, -1) . '
WHERE ' . $condition, __FILE__, __LINE__);
updateStats('postgroups', $condition, array_keys($data));
// Clear any caching?
if (!empty($modSettings['cache_enable']) && $modSettings['cache_enable'] >= 2 && !empty($members))
{
if (!is_array($members))
$members = array($members);
foreach ($members as $member)
{
if ($modSettings['cache_enable'] == 3)
{
cache_put_data('member_data-profile-' . $member, null, 120);
cache_put_data('member_data-normal-' . $member, null, 120);
cache_put_data('member_data-minimal-' . $member, null, 120);
}
cache_put_data('user_settings-' . $member, null, 60);
}
}
}