X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/2788050685113365d6b8690c093f4e5c29fb6590..0a18deef095c2142d6e152823e0673b8fe70997e:/app/controllers/trace_controller.rb diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 5b1702948..8804da78a 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -5,22 +5,26 @@ class TraceController < ApplicationController # Counts and selects pages of GPX traces for various criteria (by user, tags, public etc.). # target_user - if set, specifies the user to fetch traces for. if not set will fetch all traces - # paging_action - the action that will be linked back to from view - 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 - + def list (target_user = nil) # from display name, pick up user id if one user's traces only display_name = params[:display_name] - if target_user.nil? and display_name and display_name != '' - @paging_action = 'view' + if target_user.nil? and !display_name.blank? @display_name = display_name @title += " from #{@display_name}" target_user = User.find(:first, :conditions => [ "display_name = ?", display_name]) end + # set title + if target_user.nil? + @title = "public GPS traces" + elsif target_user.id == @user.id + @title = "your GPS traces" + else + @title = "public GPS traces from #{target_user.display_name}" + end + + @title += " tagged with #{params[:tag]}" if params[:tag] + opt = Hash.new opt[:include] = [:user, :tags] # load users and tags from db at same time as traces @@ -52,18 +56,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,13 +74,11 @@ 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 end def mine if @user - list(@user, 'mine') unless @user.nil? + list(@user) unless @user.nil? else redirect_to :controller => 'user', :action => 'login', :referer => request.request_uri end @@ -98,6 +91,8 @@ 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 @@ -118,7 +113,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