Improve consistency of trace upload forms and error handling.
authorTom Hughes <tom@compton.nu>
Tue, 25 Sep 2007 23:18:32 +0000 (23:18 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 25 Sep 2007 23:18:32 +0000 (23:18 +0000)
Fixes #543 and #544.

app/controllers/trace_controller.rb
app/views/trace/_trace_form.rhtml [new file with mode: 0644]
app/views/trace/create.rhtml
app/views/trace/mine.rhtml

index 3eb7f5c7ece1eb0a247e2748c07117f06d79e409..7c5bd7db00df0d64b4561a170fe5bf749eba5723 100644 (file)
@@ -94,17 +94,26 @@ class TraceController < ApplicationController
   end
 
   def create
   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
 
     end
   end
 
@@ -259,11 +268,7 @@ class TraceController < ApplicationController
 
   def api_create
     if request.post?
 
   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"
 
       if @trace.id
         render :text => @trace.id.to_s, :content_type => "text/plain"
@@ -279,10 +284,11 @@ class TraceController < ApplicationController
 
 private
 
 
 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}"
 
     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})
 
     @trace = Trace.new({:name => name, :tagstring => tags,
                         :description => description, :public => public})
diff --git a/app/views/trace/_trace_form.rhtml b/app/views/trace/_trace_form.rhtml
new file mode 100644 (file)
index 0000000..2998450
--- /dev/null
@@ -0,0 +1,9 @@
+<% form_for :trace, @trace, :url => { :action => "create" }, :html => { :multipart => true } do |f| %>
+<table>
+  <tr><td align="right">Upload GPX File</td><td><%= f.file_field :gpx_file, :size => 50, :maxlength => 255 %></td></tr>
+  <tr><td align="right">Description</td><td><%= f.text_field :description, :size => 50, :maxlength => 255 %></td></tr>
+  <tr><td align="right">Tags</td><td><%= f.text_field :tagstring, :size => 50, :maxlength => 255 %></td></tr>
+  <tr><td align="right">Public?</td><td><%= f.check_box :public %></td></tr>
+  <tr><td></td><td><%= submit_tag 'Upload' %> | <a href="http://wiki.openstreetmap.org/index.php/Upload">Help</a></td></tr>
+</table>
+<% end %>
index db9dc385ca3e63ee032fe72f46cc56fb67282ae5..94f4039516d7e3914bc88a6f9ac4acf4a29604ed 100644 (file)
@@ -2,14 +2,4 @@
 
 <%= error_messages_for 'trace' %>
 
 
 <%= error_messages_for 'trace' %>
 
-<% form_tag({:action => 'create'}, :multipart => true) do %>
-<table>
-<tr><td align="right">Upload GPX File</td><td><%= file_field('trace', 'gpx_file', {:size => 50, :maxlength => 255}) %></td></tr>
-<tr><td align="right">Description</td><td><%= text_field('trace', 'description', {:size => 50, :maxlength => 255}) %></td></tr>
-<tr><td align="right">Tags</td><td><%= text_field('trace', 'tagstring', {:size => 50, :maxlength => 255}) %></td></tr>
-<tr><td align="right">Public?</td><td><%= check_box('trace', 'public') %></td></tr>
-<tr><td></td><td>
-<%= submit_tag 'Upload' %> | <a href="http://wiki.openstreetmap.org/index.php/Upload">help</a>
-</td></tr>
-</table>
-<% end %>
+<%= render :partial => 'trace_form' %>
index 291217753aee210c9e956637888ae3deb97ba1c2..7deaa18315efa4f98fe263563ac7338206241a42 100644 (file)
@@ -1,16 +1,3 @@
 <%= render :partial => 'trace_header' %>
 <%= render :partial => 'trace_header' %>
-
-<% form_tag({:action => 'create'}, :multipart => true) do %>
-<table>
-<table>
-<tr><td align="right">upload GPX file:</td><td><%= file_field('trace', 'gpx_file', {:size => 50, :maxlength => 255}) %></td></tr>
-<tr><td align="right">description:</td><td><%= text_field('trace', 'description', {:size => 50, :maxlength => 255}) %></td></tr>
-<tr><td align="right">tags:</td><td><%= text_field('trace', 'tagstring', {:size => 50, :maxlength => 255}) %></td></tr>
-<tr><td align="right">public?</td><td><%= check_box('trace', 'public', {:checked => 'checked'}) %></td></tr>
-<tr><td></td><td>
-<%= submit_tag 'Upload' %> | <a href="http://wiki.openstreetmap.org/index.php/Upload">help</a>
-</td></tr>
-</table>
-<% end %>
-
+<%= render :partial => 'trace_form' %>
 <%= render :partial => 'trace_list' %>
 <%= render :partial => 'trace_list' %>