]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/trace_controller.rb
Use the rails paginator to paginate the trace list, and abstract some
[rails.git] / app / controllers / trace_controller.rb
index 2d4a26c29bcd951b07dc68cdf66a605276cce189..de8b17f3025c65427f61edfeed9118d855577b8d 100644 (file)
@@ -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
@@ -103,7 +93,7 @@ class TraceController < ApplicationController
   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 +108,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 +190,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 +203,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