]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/trace_controller.rb
Remove bogus setting of title attribute.
[rails.git] / app / controllers / trace_controller.rb
index 2d4a26c29bcd951b07dc68cdf66a605276cce189..94a7415f0de559022991f18bcec3d7a6535a513c 100644 (file)
@@ -5,22 +5,25 @@ 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 +55,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 +73,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,12 +90,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 +112,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 +194,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 +207,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