def list (target_user = nil, paging_action = 'list')
@title = 'public GPS traces'
@title += " tagged with #{params[:tag]}" if params[:tag]
- @traces_per_page = 20
page_index = params[:page] ? params[:page].to_i - 1 : 0 # nice 1-based page -> 0-based page index
# from display name, pick up user id if one user's traces only
end
opt[:conditions] = conditions
+ opt[:per_page] = 20
- # count traces using all options except limit
- @max_trace = Trace.count(opt)
- @max_page = Integer((@max_trace + 1) / @traces_per_page)
-
- # last step before fetch - add paging options
- opt[:limit] = @traces_per_page
- if page_index > 0
- opt[:offset] = @traces_per_page * page_index
- end
-
- @traces = Trace.find(:all , opt)
+ @trace_pages, @traces = paginate(:traces, opt)
# put together SET of tags across traces, for related links
tagset = Hash.new
# final helper vars for view
@display_name = display_name
@all_tags = tagset.values
- @paging_action = paging_action # the action that paging requests should route back to, e.g. 'list' or 'mine'
- @page = page_index + 1 # nice 1-based external page numbers
+## @paging_action = paging_action # the action that paging requests should route back to, e.g. 'list' or 'mine'
+## @page = page_index + 1 # nice 1-based external page numbers
end
def mine
def create
name = params[:trace][:gpx_file].original_filename.gsub(/[^a-zA-Z0-9.]/, '_') # This makes sure filenames are sane
- do_create(name, params[:trace][:tagstring], params[:trace][:description]) do |f|
+ do_create(name, params[:trace][:tagstring], params[:trace][:description], params[:trace][:public]) do |f|
f.write(params[:trace][:gpx_file].read)
end
def data
trace = Trace.find(params[:id])
if trace and (trace.public? or (@user and @user == trace.user))
- send_file(trace.trace_name, :filename => "#{trace.id}.gpx", :type => trace.mime_type, :disposition => 'attachment')
+ send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => 'attachment')
else
render :nothing, :status => :not_found
end
end
def api_create
- do_create(params[:filename], params[:tags], params[:description]) do |f|
+ do_create(params[:filename], params[:tags], params[:description], true) do |f|
f.write(request.raw_post)
end
private
- def do_create(name, tags, description)
+ def do_create(name, tags, description, public)
filename = "/tmp/#{rand}"
File.open(filename, "w") { |f| yield f }
- @trace = Trace.new({:name => name, :tagstring => tags, :description => description})
+ @trace = Trace.new({:name => name, :tagstring => tags,
+ :description => description, :public => public})
@trace.inserted = false
@trace.user = @user
@trace.timestamp = Time.now