end
# get all the points
- points = Tracepoint.bbox(bbox).offset(offset).limit(TRACEPOINTS_PER_PAGE).order("gpx_id DESC, trackid ASC, timestamp ASC")
+ 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(TRACEPOINTS_PER_PAGE)
doc = XML::Document.new
doc.encoding = XML::Encoding::UTF_8
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 => "trace", :action => "view", :display_name => gpx_file.user.display_name, :id => gpx_file.id))
+ track << (XML::Node.new("url") << url_for(:controller => "traces", :action => "show", :display_name => gpx_file.user.display_name, :id => gpx_file.id))
end
else
# use the anonymous track segment if the user hasn't allowed
response.headers["Content-Disposition"] = "attachment; filename=\"tracks.gpx\""
- render :text => doc.to_s, :content_type => "text/xml"
+ render :xml => doc.to_s
end
# This is probably the most common call of all. It is used for getting the
# - [0] in case some thing links to node 0 which doesn't exist. Shouldn't actually ever happen but it does. FIXME: file a ticket for this
nodes_to_fetch = (list_of_way_nodes.uniq - node_ids) - [0]
- unless nodes_to_fetch.empty?
- nodes += Node.includes(:node_tags).find(nodes_to_fetch)
- end
+ nodes += Node.includes(:node_tags).find(nodes_to_fetch) unless nodes_to_fetch.empty?
visible_nodes = {}
changeset_cache = {}
# this "uniq" may be slightly inefficient; it may be better to first collect and output
# all node-related relations, then find the *not yet covered* way-related ones etc.
relations.uniq.each do |relation|
- doc.root << relation.to_xml_node(nil, changeset_cache, user_display_name_cache)
+ doc.root << relation.to_xml_node(changeset_cache, user_display_name_cache)
end
response.headers["Content-Disposition"] = "attachment; filename=\"map.osm\""
- render :text => doc.to_s, :content_type => "text/xml"
+ render :xml => doc.to_s
end
# Get a list of the tiles that have changed within a specified time
doc.root << changes
- render :text => doc.to_s, :content_type => "text/xml"
+ render :xml => doc.to_s
else
- render :text => "Requested zoom is invalid, or the supplied start is after the end time, or the start duration is more than 24 hours", :status => :bad_request
+ render :plain => "Requested zoom is invalid, or the supplied start is after the end time, or the start duration is more than 24 hours", :status => :bad_request
end
end
area = XML::Node.new "area"
area["maximum"] = MAX_REQUEST_AREA.to_s
api << area
+ notearea = XML::Node.new "note_area"
+ notearea["maximum"] = MAX_NOTE_REQUEST_AREA.to_s
+ api << notearea
tracepoints = XML::Node.new "tracepoints"
tracepoints["per_page"] = TRACEPOINTS_PER_PAGE.to_s
api << tracepoints
policy << blacklist
doc.root << policy
- render :text => doc.to_s, :content_type => "text/xml"
+ render :xml => doc.to_s
end
# External apps that use the api are able to query which permissions
# * if authenticated via basic auth all permissions are granted, so the list will contain all permissions.
# * unauthenticated users have no permissions, so the list will be empty.
def permissions
- @permissions = case
- when current_token.present?
+ @permissions = if current_token.present?
ClientApplication.all_permissions.select { |p| current_token.read_attribute(p) }
- when @user
+ elsif current_user
ClientApplication.all_permissions
else
[]