]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/trace_controller.rb
api06: Move version-checking into the models, raising an exception on mismatch
[rails.git] / app / controllers / trace_controller.rb
index 7c5bd7db00df0d64b4561a170fe5bf749eba5723..3bb0d3323b0e2fa0b3f12261847862c4785a35ac 100644 (file)
@@ -83,6 +83,13 @@ class TraceController < ApplicationController
 
   def view
     @trace = Trace.find(params[:id])
+
+    unless @trace
+      flash[:notice] = "OH NOES! Trace not found!"
+      redirect_to :controller => 'trace', :action => 'list'
+      return
+    end
+
     @title = "Viewing trace #{@trace.name}"
     if !@trace.visible?
       render :nothing => true, :status => :not_found
@@ -90,7 +97,8 @@ class TraceController < ApplicationController
       render :nothing => true, :status => :forbidden
     end
   rescue ActiveRecord::RecordNotFound
-    render :nothing => true, :status => :not_found
+    flash[:notice] = "GPX file not found"
+    redirect_to :controller => 'trace', :action => 'list'
   end
 
   def create
@@ -107,11 +115,11 @@ class TraceController < ApplicationController
       end
     else
       @trace = Trace.new({:name => "Dummy",
-                          :tagstring => params[:trace][:tagstring],
-                          :description => params[:trace][:description],
-                          :public => params[:trace][:public],
-                          :inserted => false, :user => @user,
-                          :timestamp => Time.now})
+                         :tagstring => params[:trace][:tagstring],
+                         :description => params[:trace][:description],
+                         :public => params[:trace][:public],
+                         :inserted => false, :user => @user,
+                         :timestamp => Time.now})
       @trace.valid?
       @trace.errors.add(:gpx_file, "can't be blank")
     end
@@ -121,7 +129,11 @@ class TraceController < ApplicationController
     trace = Trace.find(params[:id])
 
     if trace.visible? and (trace.public? or (@user and @user == trace.user))
-      send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => 'attachment')
+      if request.format == Mime::XML
+        send_file(trace.xml_file, :filename => "#{trace.id}.xml", :type => Mime::XML.to_s, :disposition => 'attachment')
+      else
+        send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => 'attachment')
+      end
     else
       render :nothing, :status => :not_found
     end
@@ -192,7 +204,7 @@ class TraceController < ApplicationController
       conditions[0] += " AND users.display_name = ?"
       conditions << params[:display_name]
     end
-    
+
     if params[:tag]
       conditions[0] += " AND EXISTS (SELECT * FROM gpx_file_tags AS gft WHERE gft.gpx_id = gpx_files.id AND gft.tag = ?)"
       conditions << params[:tag]
@@ -282,7 +294,7 @@ class TraceController < ApplicationController
     end
   end
 
-private
+  private
 
   def do_create(file, tags, description, public)
     name = file.original_filename.gsub(/[^a-zA-Z0-9.]/, '_')
@@ -291,13 +303,13 @@ private
     File.open(filename, "w") { |f| f.write(file.read) }
 
     @trace = Trace.new({:name => name, :tagstring => tags,
-                        :description => description, :public => public})
+                       :description => description, :public => public})
     @trace.inserted = false
     @trace.user = @user
     @trace.timestamp = Time.now
 
     if @trace.save
-      File.rename(filename, @trace.trace_name)
+      FileUtils.mv(filename, @trace.trace_name)
     else
       FileUtils.rm_f(filename)
     end