]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/api/tracepoints_controller.rb
Merge pull request #3009 from gravitystorm/svg_icons
[rails.git] / app / controllers / api / tracepoints_controller.rb
index c71b5a3e9a06d7e6c5e7e1d3fea08282ae4db29f..b2d755fe6caeaefccfac88a7e94ddf569c6467b6 100644 (file)
@@ -1,8 +1,5 @@
 module Api
 module Api
-  class TracepointsController < ApplicationController
-    skip_before_action :verify_authenticity_token
-    before_action :api_deny_access_handler
-
+  class TracepointsController < ApiController
     authorize_resource
 
     before_action :check_api_readable
     authorize_resource
 
     before_action :check_api_readable
@@ -28,15 +25,15 @@ module Api
         bbox = BoundingBox.from_bbox_params(params)
         bbox.check_boundaries
         bbox.check_size
         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")
         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
 
       doc = XML::Document.new
       doc.encoding = XML::Encoding::UTF_8
@@ -56,24 +53,22 @@ module Api
       trkseg = nil
       anon_track = nil
       anon_trkseg = nil
       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
       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
 
             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
             end
           else
             # use the anonymous track segment if the user hasn't allowed
@@ -88,7 +83,7 @@ module Api
         end
 
         if trackid != point.trackid
         end
 
         if trackid != point.trackid
-          if gpx_file.trackable?
+          if point.trace.trackable?
             trkseg = XML::Node.new "trkseg"
             track << trkseg
             trackid = point.trackid
             trkseg = XML::Node.new "trkseg"
             track << trkseg
             trackid = point.trackid
@@ -101,7 +96,7 @@ module Api
           end
         end
 
           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\""
       end
 
       response.headers["Content-Disposition"] = "attachment; filename=\"tracks.gpx\""