From: Tom Hughes Date: Wed, 12 Feb 2025 17:59:25 +0000 (+0000) Subject: Merge remote-tracking branch 'upstream/pull/5622' X-Git-Tag: live~61 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/22f590c9ef38ce3a1745be4cc3f411c763696c07?hp=-c Merge remote-tracking branch 'upstream/pull/5622' --- 22f590c9ef38ce3a1745be4cc3f411c763696c07 diff --combined app/controllers/api/notes_controller.rb index 1a53877e6,f6d6dede9..bc4d2eaf2 --- a/app/controllers/api/notes_controller.rb +++ b/app/controllers/api/notes_controller.rb @@@ -81,22 -81,19 +81,22 @@@ module Ap # 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 @@@ -266,7 -263,9 +266,9 @@@ end # Add any text filter - @notes = @notes.joins(:comments).where("to_tsvector('english', note_comments.body) @@ plainto_tsquery('english', ?)", params[:q]) if params[:q] + if params[:q] + @notes = @notes.joins(:comments).where("to_tsvector('english', note_comments.body) @@ plainto_tsquery('english', ?) OR to_tsvector('english', notes.description) @@ plainto_tsquery('english', ?)", params[:q], params[:q]) + end # Add any date filter if params[:from] @@@ -382,28 -381,17 +384,28 @@@ 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)