X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/3bb07e29ec7c178757f3c94eea84935a554d812d..4fac47a214d4f0ab2228cdb3b0f646f11d41b4ef:/app/controllers/api/tracepoints_controller.rb diff --git a/app/controllers/api/tracepoints_controller.rb b/app/controllers/api/tracepoints_controller.rb index 7799de266..b2d755fe6 100644 --- a/app/controllers/api/tracepoints_controller.rb +++ b/app/controllers/api/tracepoints_controller.rb @@ -1,7 +1,5 @@ module Api class TracepointsController < ApiController - before_action :api_deny_access_handler - authorize_resource before_action :check_api_readable @@ -27,15 +25,15 @@ module Api bbox = BoundingBox.from_bbox_params(params) bbox.check_boundaries bbox.check_size - rescue StandardError => err - report_error(err.message) + rescue StandardError => e + report_error(e.message) return end # get all the points ordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[trackable identifiable] }).order("gpx_id DESC, trackid ASC, timestamp ASC") unordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[public private] }).order("gps_points.latitude", "gps_points.longitude", "gps_points.timestamp") - points = ordered_points.union_all(unordered_points).offset(offset).limit(Settings.tracepoints_per_page) + points = ordered_points.union_all(unordered_points).offset(offset).limit(Settings.tracepoints_per_page).preload(:trace) doc = XML::Document.new doc.encoding = XML::Encoding::UTF_8 @@ -55,24 +53,22 @@ module Api trkseg = nil anon_track = nil anon_trkseg = nil - gpx_file = nil timestamps = false points.each do |point| if gpx_id != point.gpx_id gpx_id = point.gpx_id trackid = -1 - gpx_file = Trace.find(gpx_id) - if gpx_file.trackable? + if point.trace.trackable? track = XML::Node.new "trk" doc.root << track timestamps = true - if gpx_file.identifiable? - track << (XML::Node.new("name") << gpx_file.name) - track << (XML::Node.new("desc") << gpx_file.description) - track << (XML::Node.new("url") << url_for(:controller => "/traces", :action => "show", :display_name => gpx_file.user.display_name, :id => gpx_file.id)) + if point.trace.identifiable? + track << (XML::Node.new("name") << point.trace.name) + track << (XML::Node.new("desc") << point.trace.description) + track << (XML::Node.new("url") << url_for(:controller => "/traces", :action => "show", :display_name => point.trace.user.display_name, :id => point.trace.id)) end else # use the anonymous track segment if the user hasn't allowed @@ -87,7 +83,7 @@ module Api end if trackid != point.trackid - if gpx_file.trackable? + if point.trace.trackable? trkseg = XML::Node.new "trkseg" track << trkseg trackid = point.trackid @@ -100,7 +96,7 @@ module Api end end - trkseg << point.to_xml_node(timestamps) + trkseg << point.to_xml_node(:print_timestamp => timestamps) end response.headers["Content-Disposition"] = "attachment; filename=\"tracks.gpx\""