+ if params[:trace]
+ logger.info(params[:trace][:gpx_file].class.name)
+ if params[:trace][:gpx_file].respond_to?(:read)
+ begin
+ do_create(params[:trace][:gpx_file], params[:trace][:tagstring],
+ params[:trace][:description], params[:trace][:visibility])
+ rescue => ex
+ logger.debug ex
+ end
+
+ if @trace.id
+ logger.info("id is #{@trace.id}")
+ flash[:notice] = t 'trace.create.trace_uploaded'
+
+ if @user.traces.count(:conditions => { :inserted => false }) > 4
+ flash[:warning] = t 'trace.trace_header.traces_waiting', :count => @user.traces.count(:conditions => { :inserted => false })
+ end
+
+ redirect_to :action => :list, :display_name => @user.display_name
+ end
+ else
+ @trace = Trace.new({:name => "Dummy",
+ :tagstring => params[:trace][:tagstring],
+ :description => params[:trace][:description],
+ :visibility => params[:trace][:visibility],
+ :inserted => false, :user => @user,
+ :timestamp => Time.now.getutc})
+ @trace.valid?
+ @trace.errors.add(:gpx_file, "can't be blank")
+ end
+ end
+ @title = t 'trace.create.upload_trace'
+ end
+
+ def data
+ trace = Trace.find(params[:id])
+
+ if trace.visible? and (trace.public? or (@user and @user == trace.user))
+ 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 => true, :status => :not_found
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :nothing => true, :status => :not_found
+ end
+
+ def edit
+ @trace = Trace.find(params[:id])
+
+ if @user and @trace.user == @user
+ @title = t 'trace.edit.title', :name => @trace.name
+ if params[:trace]
+ @trace.description = params[:trace][:description]
+ @trace.tagstring = params[:trace][:tagstring]
+ @trace.visibility = params[:trace][:visibility]
+ if @trace.save
+ redirect_to :action => 'view'
+ end
+ end
+ else
+ render :nothing => true, :status => :forbidden
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :nothing => true, :status => :not_found
+ end
+
+ def delete
+ trace = Trace.find(params[:id])
+
+ if @user and trace.user == @user
+ if request.post? and trace.visible?
+ trace.visible = false
+ trace.save
+ flash[:notice] = t 'trace.delete.scheduled_for_deletion'
+ redirect_to :action => :list, :display_name => @user.display_name
+ else
+ render :nothing => true, :status => :bad_request
+ end
+ else
+ render :nothing => true, :status => :forbidden
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :nothing => true, :status => :not_found
+ end
+
+ def georss
+ conditions = ["gpx_files.visibility in ('public', 'identifiable')"]
+
+ if params[:display_name]
+ conditions[0] += " AND users.display_name = ?"
+ conditions << params[:display_name]
+ end