diff options
author | francis <francis> | 2009-10-19 22:06:54 +0000 |
---|---|---|
committer | francis <francis> | 2009-10-19 22:06:54 +0000 |
commit | 0828775dbee38080a1fe17d1e37d6e000c6f64fc (patch) | |
tree | 15a1687c5747d37a2c2c98f4f8225a4cb09096f5 | |
parent | 231b1bfb5f74eff76c59afe083cda17bf593d6e6 (diff) |
Top 10!
-rw-r--r-- | app/controllers/request_game_controller.rb | 23 | ||||
-rw-r--r-- | app/models/info_request_event.rb | 21 | ||||
-rw-r--r-- | app/views/request_game/play.rhtml | 14 |
3 files changed, 40 insertions, 18 deletions
diff --git a/app/controllers/request_game_controller.rb b/app/controllers/request_game_controller.rb index 134a87b73..599a82fd6 100644 --- a/app/controllers/request_game_controller.rb +++ b/app/controllers/request_game_controller.rb @@ -4,7 +4,7 @@ # Copyright (c) 2009 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: request_game_controller.rb,v 1.8 2009-10-14 22:24:16 francis Exp $ +# $Id: request_game_controller.rb,v 1.9 2009-10-19 22:06:54 francis Exp $ class RequestGameController < ApplicationController @@ -24,21 +24,12 @@ class RequestGameController < ApplicationController redirect_to frontpage_url end - # Work out league table - status_update_events = InfoRequestEvent.find(:all, - :conditions => [ "event_type = 'status_update' and created_at >= ?", Time.now() - 28.days ]) - table = Hash.new { |h,k| h[k] = 0 } - for event in status_update_events - user_id = event.params[:user_id] - table[user_id] += 1 - end - @league_table = [] - for user_id, count in table - user = User.find(user_id) - @league_table.push([user, count]) - end - @league_table.sort! { |a,b| b[1] <=> a[1] } - + @league_table_28_days = InfoRequestEvent.make_league_table( + [ "event_type = 'status_update' and created_at >= ?", Time.now() - 28.days ] + )[0..10] + @league_table_all_time = InfoRequestEvent.make_league_table( + [ "event_type = 'status_update'"] + )[0..10] @play_urls = true end diff --git a/app/models/info_request_event.rb b/app/models/info_request_event.rb index 0d86d07ff..4e2a10a1f 100644 --- a/app/models/info_request_event.rb +++ b/app/models/info_request_event.rb @@ -21,7 +21,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: info_request_event.rb,v 1.95 2009-10-19 19:27:24 francis Exp $ +# $Id: info_request_event.rb,v 1.96 2009-10-19 22:06:55 francis Exp $ class InfoRequestEvent < ActiveRecord::Base belongs_to :info_request @@ -343,6 +343,25 @@ class InfoRequestEvent < ActiveRecord::Base return TMail::Address.parse(prev_addr).address == TMail::Address.parse(curr_addr).address end + # Given a find condition clause, creates a league table of users who made those events. + # XXX this isn't very generic yet, it is just used for the categorisation game tables. + def InfoRequestEvent.make_league_table(conditions) + status_update_events = InfoRequestEvent.find(:all, :conditions => conditions) + table = Hash.new { |h,k| h[k] = 0 } + for event in status_update_events + user_id = event.params[:user_id] + table[user_id] += 1 + end + league_table = [] + for user_id, count in table + user = User.find(user_id) + league_table.push([user, count]) + end + league_table.sort! { |a,b| b[1] <=> a[1] } + return league_table + end + + end diff --git a/app/views/request_game/play.rhtml b/app/views/request_game/play.rhtml index 8eb3bf97e..36e9adac7 100644 --- a/app/views/request_game/play.rhtml +++ b/app/views/request_game/play.rhtml @@ -8,8 +8,20 @@ <h2>Top recent players</h2> <table> - <% for user, count in @league_table %> + <% c = 0; for user, count in @league_table_28_days %> <tr> + <td> <%= c += 1 %>. <td> + <td> <%= user_link(user) %> </td> + <td> <%=pluralize(count, 'request').gsub(" ", " ")%> </td> + </tr> + <% end %> + </table> + + <h2>All time best players</h2> + <table> + <% c = 0; for user, count in @league_table_all_time %> + <tr> + <td> <%= c += 1 %>. <td> <td> <%= user_link(user) %> </td> <td> <%=pluralize(count, 'request').gsub(" ", " ")%> </td> </tr> |