+ 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.where(:inserted => false).count > 4
+ flash[:warning] = t 'trace.trace_header.traces_waiting', :count => @user.traces.where(:inserted => false).count
+ 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
+ else
+ @trace = Trace.new(:visibility => default_visibility)
+ 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 Acl.no_trace_download(request.remote_ip)
+ render :text => "", :status => :forbidden
+ elsif request.format == Mime::XML or request.format == Mime::GPX
+ send_file(trace.xml_file, :filename => "#{trace.id}.xml", :type => request.format.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 :text => "", :status => :not_found
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :text => "", :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', :display_name => @user.display_name
+ end
+ end
+ else
+ render :text => "", :status => :forbidden
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :text => "", :status => :not_found
+ end
+
+ def delete
+ trace = Trace.find(params[:id])
+
+ if @user and trace.user == @user
+ if 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 :text => "", :status => :not_found
+ end
+ else
+ render :text => "", :status => :forbidden
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :text => "", :status => :not_found
+ end
+
+ def georss
+ @traces = Trace.public.visible
+
+ if params[:display_name]
+ @traces = @traces.joins(:user).where(:users => {:display_name => params[:display_name]})
+ end
+
+ if params[:tag]
+ @traces = @traces.tagged(params[:tag])
+ end
+
+ @traces = @traces.order("timestamp DESC")
+ @traces = @traces.limit(20)
+ @traces = @traces.includes(:user)
+ end
+
+ def picture
+ trace = Trace.find(params[:id])
+
+ if trace.inserted?
+ if trace.public? or (@user and @user == trace.user)
+ expires_in 7.days, :private => !trace.public?, :public => trace.public?
+ send_file(trace.large_picture_name, :filename => "#{trace.id}.gif", :type => 'image/gif', :disposition => 'inline')
+ else
+ render :text => "", :status => :forbidden
+ end
+ else
+ render :text => "", :status => :not_found
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :text => "", :status => :not_found
+ end
+
+ def icon
+ trace = Trace.find(params[:id])
+
+ if trace.inserted?
+ if trace.public? or (@user and @user == trace.user)
+ expires_in 7.days, :private => !trace.public?, :public => trace.public?
+ send_file(trace.icon_picture_name, :filename => "#{trace.id}_icon.gif", :type => 'image/gif', :disposition => 'inline')
+ else
+ render :text => "", :status => :forbidden
+ end
+ else
+ render :text => "", :status => :not_found