]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/trace_controller.rb
Make /user/new handle already logged in users better
[rails.git] / app / controllers / trace_controller.rb
index f381b3243d72a1e0dfa3b3ff1c82b8ff54b260b0..cdfa5e3cbe76f60b460fb1e8843225b6a00a101d 100644 (file)
@@ -1,6 +1,7 @@
 class TraceController < ApplicationController
   layout 'site'
 
+  skip_before_filter :verify_authenticity_token, :only => [:api_create, :api_read, :api_update, :api_delete, :api_data]
   before_filter :authorize_web
   before_filter :set_locale
   before_filter :require_user, :only => [:mine, :create, :edit, :delete]
@@ -27,7 +28,7 @@ class TraceController < ApplicationController
     # from display name, pick up user id if one user's traces only
     display_name = params[:display_name]
     if !display_name.blank?
-      target_user = User.where("status IN ('active', 'confirmed')").where(:display_name => display_name).first
+      target_user = User.active.where(:display_name => display_name).first
       if target_user.nil?
         @title = t'trace.no_such_user.title'
         @not_found_user = display_name
@@ -54,15 +55,15 @@ class TraceController < ApplicationController
     # 4 - user's traces, not logged in as that user = all user's public traces
     if target_user.nil? # all traces
       if @user
-        @traces = Trace.where("visibility IN ('public', 'identifiable') OR user_id = ?", @user.id) #1
+        @traces = Trace.visible_to(@user) #1
       else
-        @traces = Trace.where("visibility IN ('public', 'identifiable')") #2
+        @traces = Trace.public #2
       end
     else
       if @user and @user == target_user
-        @traces = Trace.where(:user_id => @user.id) #3 (check vs user id, so no join + can't pick up non-public traces by changing name)
+        @traces = @user.traces #3 (check vs user id, so no join + can't pick up non-public traces by changing name)
       else
-        @traces = Trace.where("visibility IN ('public', 'identifiable') AND user_id = ?", target_user.id) #4
+        @traces = target_user.traces.public #4
       end
     end
 
@@ -79,7 +80,7 @@ class TraceController < ApplicationController
     @page = (params[:page] || 1).to_i
     @page_size = 20
 
-    @traces = @traces.where(:visible => true)
+    @traces = @traces.visible
     @traces = @traces.order("timestamp DESC")
     @traces = @traces.offset((@page - 1) * @page_size)
     @traces = @traces.limit(@page_size)
@@ -214,10 +215,10 @@ class TraceController < ApplicationController
   end
 
   def georss
-    traces = Trace.where("visibility IN ('public', 'identifiable')")
+    traces = Trace.public
 
     if params[:display_name]
-      traces = traces.where(:users => {:display_name => params[:display_name]})
+      traces = traces.joins(:user).where(:users => {:display_name => params[:display_name]})
     end
 
     if params[:tag]
@@ -272,7 +273,7 @@ class TraceController < ApplicationController
   end
 
   def api_read
-    trace = Trace.find(params[:id], :conditions => { :visible => true })
+    trace = Trace.visible.find(params[:id])
 
     if trace.public? or trace.user == @user
       render :text => trace.to_xml.to_s, :content_type => "text/xml"
@@ -282,7 +283,7 @@ class TraceController < ApplicationController
   end
 
   def api_update
-    trace = Trace.find(params[:id], :conditions => { :visible => true })
+    trace = Trace.visible.find(params[:id])
 
     if trace.user == @user
       new_trace = Trace.from_xml(request.raw_post)
@@ -303,7 +304,7 @@ class TraceController < ApplicationController
   end
 
   def api_delete
-    trace = Trace.find(params[:id], :conditions => { :visible => true })
+    trace = Trace.visible.find(params[:id])
 
     if trace.user == @user
       trace.visible = false