lots of rails gpx stuff
[rails.git] / app / controllers / trace_controller.rb
1 class TraceController < ApplicationController
2   before_filter :authorize_web  
3   layout 'site'
4
5   def list
6     @traces = Trace.find(:all)
7   end
8
9   def mine
10     @traces = Trace.find(:all, :conditions => ['user_id = ?', @user.id])
11   end
12
13   def view
14     @trace = Trace.find(params[:id])
15     render :nothing, :status => 401 if @trace.user.id != @user.id
16   end
17
18   def create
19     filename = "/tmp/#{rand}"
20
21     File.open(filename, "w") { |f| f.write(@params['trace']['gpx_file'].read) }
22     @params['trace']['name'] = @params['trace']['gpx_file'].original_filename.gsub(/[^a-zA-Z0-9.]/, '_') # This makes sure filenames are sane
23     @params['trace'].delete('gpx_file') # let's remove the field from the hash, because there's no such field in the DB anyway.
24     @trace = Trace.new(@params['trace'])
25     @trace.inserted = false
26     @trace.user_id = @user.id
27     @trace.timestamp = Time.now
28     if @trace.save
29       logger.info("id is #{@trace.id}")
30       `mv #{filename} /tmp/#{@trace.id}.gpx`
31       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."
32     end
33
34     redirect_to :action => 'mine'
35   end
36
37   def picture
38     trace = Trace.find(params[:id])
39     send_data(trace.large_picture, :filename => "#{trace.id}.gif", :type => 'image/png', :disposition => 'inline') if trace.public
40   end
41
42   def icon
43     trace = Trace.find(params[:id])
44     send_data(trace.icon_picture, :filename => "#{trace.id}.gif", :type => 'image/gif', :disposition => 'inline') if trace.public
45   end
46
47 end