X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/4133936c6304b7d1a57c85d53fb7c3a906190164..22f590c9ef38ce3a1745be4cc3f411c763696c07:/app/controllers/api/notes_controller.rb?ds=sidebyside diff --git a/app/controllers/api/notes_controller.rb b/app/controllers/api/notes_controller.rb index f6d6dede9..bc4d2eaf2 100644 --- a/app/controllers/api/notes_controller.rb +++ b/app/controllers/api/notes_controller.rb @@ -81,19 +81,22 @@ module Api # Extract the arguments lon = OSM.parse_float(params[:lon], OSM::APIBadUserInput, "lon was not a number") lat = OSM.parse_float(params[:lat], OSM::APIBadUserInput, "lat was not a number") - comment = params[:text] + description = params[:text] + + # Get note's author info (for logged in users - user_id, for logged out users - IP address) + note_author_info = author_info # Include in a transaction to ensure that there is always a note_comment for every note Note.transaction do # Create the note - @note = Note.create(:lat => lat, :lon => lon) + @note = Note.create(:lat => lat, :lon => lon, :description => description, :user_id => note_author_info[:user_id], :user_ip => note_author_info[:user_ip]) raise OSM::APIBadUserInput, "The note is outside this world" unless @note.in_world? # Save the note @note.save! - # Add a comment to the note - add_comment(@note, comment, "opened") + # Add opening comment (description) to the note + add_comment(@note, description, "opened") end # Return a copy of the new note @@ -381,17 +384,28 @@ module Api end end + ## + # Get author's information (for logged in users - user_id, for logged out users - IP address) + def author_info + if scope_enabled?(:write_notes) + { :user_id => current_user.id } + else + { :user_ip => request.remote_ip } + end + end + ## # Add a comment to a note def add_comment(note, text, event, notify: true) attributes = { :visible => true, :event => event, :body => text } - author = current_user if scope_enabled?(:write_notes) + # Get note comment's author info (for logged in users - user_id, for logged out users - IP address) + note_comment_author_info = author_info - if author - attributes[:author_id] = author.id + if note_comment_author_info[:user_ip].nil? + attributes[:author_id] = note_comment_author_info[:user_id] else - attributes[:author_ip] = request.remote_ip + attributes[:author_ip] = note_comment_author_info[:user_ip] end comment = note.comments.create!(attributes)