aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/request_game_controller.rb23
-rw-r--r--app/models/info_request_event.rb21
-rw-r--r--app/views/request_game/play.rhtml14
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(" ", "&nbsp;")%> </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(" ", "&nbsp;")%> </td>
</tr>