X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/aacc7ae3e0d8b9d0a1a46b4fc14355868d640306..183841d10e7acbb6dad17cc7cc3283817d44164b:/app/controllers/trace_controller.rb diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 2d4a26c29..b758d0c40 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -9,7 +9,6 @@ class TraceController < ApplicationController 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 @@ -52,18 +51,9 @@ class TraceController < ApplicationController 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 @@ -79,8 +69,8 @@ class TraceController < ApplicationController # 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 @@ -98,12 +88,14 @@ class TraceController < ApplicationController render :nothing, :status => :forbidden if @trace.user.id != @user.id end end + rescue ActiveRecord::RecordNotFound + render :nothing => true, :status => :not_found end 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 @@ -118,7 +110,7 @@ class TraceController < ApplicationController 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 @@ -200,7 +192,7 @@ class TraceController < ApplicationController 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 @@ -213,12 +205,13 @@ class TraceController < ApplicationController 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