aboutsummaryrefslogtreecommitdiffstats
path: root/app/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/api_controller.rb46
-rw-r--r--app/controllers/request_controller.rb12
-rw-r--r--app/controllers/request_game_controller.rb13
3 files changed, 45 insertions, 26 deletions
diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb
index 6c98ebeba..409a432eb 100644
--- a/app/controllers/api_controller.rb
+++ b/app/controllers/api_controller.rb
@@ -167,17 +167,41 @@ class ApiController < ApplicationController
feed_type = params[:feed_type]
raise PermissionDenied.new("#{@public_body.id} != #{params[:id]}") if @public_body.id != params[:id].to_i
- @events = InfoRequestEvent.find_by_sql([
- %(select info_request_events.*
- from info_requests
- join info_request_events on info_requests.id = info_request_events.info_request_id
- where info_requests.public_body_id = ?
- and info_request_events.event_type in (
- 'sent', 'followup_sent', 'resent', 'followup_resent'
- )
- order by info_request_events.created_at desc
- ), @public_body.id
- ])
+ since_date_str = params[:since_date]
+ if since_date_str.nil?
+ @events = InfoRequestEvent.find_by_sql([
+ %(select info_request_events.*
+ from info_requests
+ join info_request_events on info_requests.id = info_request_events.info_request_id
+ where info_requests.public_body_id = ?
+ and info_request_events.event_type in (
+ 'sent', 'followup_sent', 'resent', 'followup_resent'
+ )
+ order by info_request_events.created_at desc
+ ), @public_body.id
+ ])
+ else
+ begin
+ since_date = Date.strptime(since_date_str, "%Y-%m-%d")
+ rescue ArgumentError
+ render :json => {"errors" => [
+ "Parameter since_date must be in format yyyy-mm-dd (not '#{since_date_str}')" ] },
+ :status => 500
+ return
+ end
+ @events = InfoRequestEvent.find_by_sql([
+ %(select info_request_events.*
+ from info_requests
+ join info_request_events on info_requests.id = info_request_events.info_request_id
+ where info_requests.public_body_id = ?
+ and info_request_events.event_type in (
+ 'sent', 'followup_sent', 'resent', 'followup_resent'
+ )
+ and info_request_events.created_at >= ?
+ order by info_request_events.created_at desc
+ ), @public_body.id, since_date
+ ])
+ end
if feed_type == "atom"
render :template => "api/request_events.atom", :layout => false
elsif feed_type == "json"
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb
index 6e983a014..268ecc73a 100644
--- a/app/controllers/request_controller.rb
+++ b/app/controllers/request_controller.rb
@@ -422,19 +422,19 @@ class RequestController < ApplicationController
old_described_state = @info_request.described_state
@info_request.set_described_state(params[:incoming_message][:described_state])
- # If you're not the *actual* requester owner. e.g. you are playing the
+ # If you're not the *actual* requester. e.g. you are playing the
# classification game, or you're doing this just because you are an
# admin user (not because you also own the request).
if !@info_request.is_actual_owning_user?(authenticated_user)
- # Log what you did, for classification game score purposes. We
- # don't log if you were the requester XXX This is presumably so you
- # don't score for classifying your own requests. Could instead
- # always log and filter at display time.
- @info_request.log_event("status_update",
+ # Log the status change by someone other than the requester
+ event = @info_request.log_event("status_update",
{ :user_id => authenticated_user.id,
:old_described_state => old_described_state,
:described_state => @info_request.described_state,
})
+ # Create a classification event for league tables
+ RequestClassification.create!(:user_id => authenticated_user.id,
+ :info_request_event_id => event.id)
# Don't give advice on what to do next, as it isn't their request
RequestMailer.deliver_old_unclassified_updated(@info_request) if !@info_request.is_external?
diff --git a/app/controllers/request_game_controller.rb b/app/controllers/request_game_controller.rb
index 904c44759..f22652dd1 100644
--- a/app/controllers/request_game_controller.rb
+++ b/app/controllers/request_game_controller.rb
@@ -11,13 +11,12 @@ class RequestGameController < ApplicationController
def play
session[:request_game] = Time.now
- old = InfoRequest.find_old_unclassified(:conditions => ["prominence = 'normal'"])
- @missing = old.size
+ @missing = InfoRequest.count_old_unclassified(:conditions => ["prominence = 'normal'"])
@total = InfoRequest.count
@done = @total - @missing
@percentage = (@done.to_f / @total.to_f * 10000).round / 100.0
- @requests = old.sort_by{ rand }.slice(0..2)
+ @requests = InfoRequest.get_random_old_unclassified(3)
if @missing == 0
flash[:notice] = _('<p>All done! Thank you very much for your help.</p><p>There are <a href="{{helpus_url}}">more things you can do</a> to help {{site_name}}.</p>',
@@ -25,12 +24,8 @@ class RequestGameController < ApplicationController
:site_name => site_name)
end
- @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]
+ @league_table_28_days = RequestClassification.league_table(10, [ "created_at >= ?", Time.now() - 28.days ])
+ @league_table_all_time = RequestClassification.league_table(10)
@play_urls = true
end