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
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
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
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
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]
end
end
-private
+ private
def do_create(file, tags, description, public)
name = file.original_filename.gsub(/[^a-zA-Z0-9.]/, '_')
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