]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/trace_controller.rb
Fix the data config, so that the development database is not the same as the test...
[rails.git] / app / controllers / trace_controller.rb
index 3bb0d3323b0e2fa0b3f12261847862c4785a35ac..899df05dfc021d1d683012bfbb8b995f42579d04 100644 (file)
@@ -1,7 +1,10 @@
 class TraceController < ApplicationController
+  layout 'site'
+
   before_filter :authorize_web  
   before_filter :authorize, :only => [:api_details, :api_data, :api_create]
-  layout 'site'
+  before_filter :check_database_availability, :except => [:api_details, :api_data, :api_create]
+  before_filter :check_read_availability, :only => [:api_details, :api_data, :api_create]
  
   # Counts and selects pages of GPX traces for various criteria (by user, tags, public etc.).
   #  target_user - if set, specifies the user to fetch traces for.  if not set will fetch all traces
@@ -9,13 +12,13 @@ class TraceController < ApplicationController
     # from display name, pick up user id if one user's traces only
     display_name = params[:display_name]
     if target_user.nil? and !display_name.blank?
-      target_user = User.find(:first, :conditions => [ "display_name = ?", display_name])
+      target_user = User.find(:first, :conditions => [ "visible = 1 and display_name = ?", display_name])
     end
 
     # set title
     if target_user.nil?
       @title = "Public GPS traces"
-    elsif @user and @user.id == target_user.id
+    elsif @user and @user == target_user
       @title = "Your GPS traces"
     else
       @title = "Public GPS traces from #{target_user.display_name}"
@@ -35,7 +38,7 @@ class TraceController < ApplicationController
         conditions  = ["gpx_files.public = 1"] #2
       end
     else
-      if @user and @user.id == target_user.id
+      if @user and @user == target_user
         conditions = ["gpx_files.user_id = ?", @user.id] #3 (check vs user id, so no join + can't pick up non-public traces by changing name)
       else
         conditions = ["gpx_files.public = 1 AND gpx_files.user_id = ?", target_user.id] #4
@@ -84,20 +87,15 @@ class TraceController < ApplicationController
   def view
     @trace = Trace.find(params[:id])
 
-    unless @trace
-      flash[:notice] = "OH NOES! Trace not found!"
+    if @trace and @trace.visible? and
+       (@trace.public? or @trace.user == @user)
+      @title = "Viewing trace #{@trace.name}"
+    else
+      flash[:notice] = "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
-    elsif !@trace.public? and @trace.user.id != @user.id
-      render :nothing => true, :status => :forbidden
     end
   rescue ActiveRecord::RecordNotFound
-    flash[:notice] = "GPX file not found"
+    flash[:notice] = "Trace not found!"
     redirect_to :controller => 'trace', :action => 'list'
   end
 
@@ -115,11 +113,11 @@ class TraceController < ApplicationController
       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
@@ -294,7 +292,7 @@ class TraceController < ApplicationController
     end
   end
 
-  private
+private
 
   def do_create(file, tags, description, public)
     name = file.original_filename.gsub(/[^a-zA-Z0-9.]/, '_')
@@ -303,7 +301,7 @@ class TraceController < ApplicationController
     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