]> git.openstreetmap.org Git - rails.git/blob - app/controllers/changeset_comments/feeds_controller.rb
Merge remote-tracking branch 'upstream/pull/5346'
[rails.git] / app / controllers / changeset_comments / feeds_controller.rb
1 module ChangesetComments
2   class FeedsController < ApplicationController
3     before_action :authorize_web
4     before_action :set_locale
5
6     authorize_resource :changeset_comment
7
8     before_action -> { check_database_readable(:need_api => true) }
9     around_action :web_timeout
10
11     ##
12     # Get a feed of recent changeset comments
13     def show
14       if params[:changeset_id]
15         # Extract the arguments
16         changeset_id = params[:changeset_id].to_i
17
18         # Find the changeset
19         changeset = Changeset.find(changeset_id)
20
21         # Return comments for this changeset only
22         @comments = changeset.comments.includes(:author, :changeset).reverse_order.limit(comments_limit)
23       else
24         # Return comments
25         @comments = ChangesetComment.includes(:author, :changeset).where(:visible => true).order("created_at DESC").limit(comments_limit).preload(:changeset)
26       end
27
28       # Render the result
29       respond_to do |format|
30         format.rss
31       end
32     rescue OSM::APIBadUserInput
33       head :bad_request
34     end
35
36     private
37
38     ##
39     # Get the maximum number of comments to return
40     def comments_limit
41       if params[:limit]
42         if params[:limit].to_i.positive? && params[:limit].to_i <= 10000
43           params[:limit].to_i
44         else
45           raise OSM::APIBadUserInput, "Comments limit must be between 1 and 10000"
46         end
47       else
48         100
49       end
50     end
51   end
52 end