]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/trace_controller.rb
unbreak undelete
[rails.git] / app / controllers / trace_controller.rb
index 3b30977552feaf41a81990975558d75bfbc2f0be..c56ff4a74052b242a8eea72f80d30ddf6b156b74 100644 (file)
@@ -94,17 +94,26 @@ class TraceController < ApplicationController
   end
 
   def create
-    name = params[:trace][:gpx_file].original_filename.gsub(/[^a-zA-Z0-9.]/, '_') # This makes sure filenames are sane
+    logger.info(params[:trace][:gpx_file].class.name)
+    if params[:trace][:gpx_file].respond_to?(:read)
+      do_create(params[:trace][:gpx_file], params[:trace][:tagstring],
+                params[:trace][:description], params[:trace][:public])
 
-    do_create(name, params[:trace][:tagstring], params[:trace][:description], params[:trace][:public]) do |f|
-      f.write(params[:trace][:gpx_file].read)
-    end
-
-    if @trace.id
-      logger.info("id is #{@trace.id}")
-      flash[:notice] = "Your GPX file has been uploaded and is awaiting insertion in to the database. This will usually happen within half an hour, and an email will be sent to you on completion."
+      if @trace.id
+        logger.info("id is #{@trace.id}")
+        flash[:notice] = "Your GPX file has been uploaded and is awaiting insertion in to the database. This will usually happen within half an hour, and an email will be sent to you on completion."
 
-      redirect_to :action => 'mine'
+        redirect_to :action => 'mine'
+      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})
+      @trace.valid?
+      @trace.errors.add(:gpx_file, "can't be blank")
     end
   end
 
@@ -112,7 +121,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
@@ -120,6 +133,24 @@ class TraceController < ApplicationController
     render :nothing => true, :status => :not_found
   end
 
+  def edit
+    @trace = Trace.find(params[:id])
+
+    if @user and @trace.user == @user
+      if params[:trace]
+        @trace.description = params[:trace][:description]
+        @trace.tagstring = params[:trace][:tagstring]
+        if @trace.save
+          redirect_to :action => 'view'
+        end        
+      end
+    else
+      render :nothing, :status => :forbidden
+    end
+  rescue ActiveRecord::RecordNotFound
+    render :nothing => true, :status => :not_found
+  end
+
   def delete
     trace = Trace.find(params[:id])
 
@@ -241,11 +272,7 @@ class TraceController < ApplicationController
 
   def api_create
     if request.post?
-      name = params[:file].original_filename.gsub(/[^a-zA-Z0-9.]/, '_') # This makes sure filenames are sane
-
-      do_create(name, params[:tags], params[:description], params[:public]) do |f|
-        f.write(params[:file].read)
-      end
+      do_create(params[:file], params[:tags], params[:description], params[:public])
 
       if @trace.id
         render :text => @trace.id.to_s, :content_type => "text/plain"
@@ -261,10 +288,11 @@ class TraceController < ApplicationController
 
 private
 
-  def do_create(name, tags, description, public)
+  def do_create(file, tags, description, public)
+    name = file.original_filename.gsub(/[^a-zA-Z0-9.]/, '_')
     filename = "/tmp/#{rand}"
 
-    File.open(filename, "w") { |f| yield f }
+    File.open(filename, "w") { |f| f.write(file.read) }
 
     @trace = Trace.new({:name => name, :tagstring => tags,
                         :description => description, :public => public})