diff options
Diffstat (limited to 'includes/user.inc')
-rw-r--r-- | includes/user.inc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/includes/user.inc b/includes/user.inc index 09b434102..5c97cb02d 100644 --- a/includes/user.inc +++ b/includes/user.inc @@ -100,4 +100,33 @@ function user_ban($mask, $type) { return db_fetch_object($result); } +function user_gravity($id) { + global $status; + + $period = 5184000; // maximum 60 days + $number = 30; // maximum 30 comments + + $r1 = db_query("SELECT COUNT(nid) AS number FROM node WHERE author = '$id' AND (". time() ." - timestamp < $period) AND status = '$status[posted]'"); + if ($story = db_fetch_object($r1)) { + $bonus += $story->number; + } + + $r2 = db_query("SELECT COUNT(nid) AS number FROM node WHERE author = '$id' AND (". time() ." - timestamp < $period) AND status = '$status[dumped]'"); + if ($story = db_fetch_object($r2)) { + $bonus -= $story->number; + } + + $r3 = db_query("SELECT score, votes FROM comments WHERE author = '$id' AND (". time() ." - timestamp < $period) ORDER BY timestamp LIMIT $number"); + while ($comment = db_fetch_object($r3)) { + $weight++; + $score += $weight * $comment->score; + $votes += $weight * $comment->votes; + } + + $bonus += $weight / 5; + + if ($votes > 0) return ($score + $weight) / $votes + $bonus; + else return 0; +} + ?>
\ No newline at end of file |