# 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
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]
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)