function invite_stats_display_user_rank in Invite 5
Same name and namespace in other branches
- 5.2 invite_stats.module \invite_stats_display_user_rank()
- 6.2 invite_stats.module \invite_stats_display_user_rank()
- 7.2 modules/invite_stats/invite_stats.module \invite_stats_display_user_rank()
Render the displayed user's rank block.
1 call to invite_stats_display_user_rank()
- invite_stats_block in ./
invite_stats.module - Implementation of hook_block().
File
- ./
invite_stats.module, line 131 - Displays some statistics about sent invitations.
Code
function invite_stats_display_user_rank($uid) {
$inviters = array();
$max = variable_get('invite_num_ranks', 5);
// Get user's invite count
$user_invite_stats_count = db_result(db_query("SELECT COUNT(*) FROM {invite} WHERE uid = %d AND timestamp > 0", $uid));
// Calculate user's rank
$rank = 1 + db_num_rows(db_query("SELECT DISTINCT COUNT(uid) FROM {invite} WHERE timestamp > 0 GROUP BY uid HAVING COUNT(uid) > %d", $user_invite_stats_count));
// Fetch users with more invites
$i = 0;
$prev_count = 0;
$result = db_query_range("SELECT uid, COUNT(uid) AS count FROM {invite} WHERE timestamp > 0 GROUP BY uid HAVING COUNT(uid) > %d ORDER BY count ASC", $user_invite_stats_count, 0, $max - 1);
while ($row = db_fetch_object($result)) {
if ($row->count != $prev_count) {
$prev_count = $row->count;
$rank--;
// Decrement initial rank
}
array_unshift($inviters, $row);
}
// Add current user, now we have invite_num_ranks users at max
$inviters[] = (object) array(
'uid' => $uid,
'count' => $user_invite_stats_count,
);
$user_idx = count($inviters);
// Add users with equal or less invites
$i = 0;
$prev_count = $user_invite_stats_count;
$result = db_query_range("SELECT uid, COUNT(uid) AS count FROM {invite} WHERE timestamp > 0 GROUP BY uid HAVING COUNT(uid) <= %d AND uid != %d ORDER BY count DESC", $user_invite_stats_count, $uid, 0, $max - 1);
while ($row = db_fetch_object($result)) {
$inviters[] = $row;
}
// Slice result
$start = max($user_idx - 1 - floor($max / 2), 0);
if (count($inviters) - $user_idx < floor($max / 2)) {
$start -= max(count($inviters) - $user_idx, floor($max / 2));
$start = max($start, 0);
}
$inviters = array_slice($inviters, $start, $max);
return theme('invite_stats_ranking', $inviters, $rank);
}