+ before_filter :authorize_web
+ before_filter :set_locale
+ before_filter :require_user, :only => [:mine, :create, :edit, :delete]
+ before_filter :authorize, :only => [:api_details, :api_data, :api_create]
+ before_filter :check_database_readable, :except => [:api_details, :api_data, :api_create]
+ before_filter :check_database_writable, :only => [:create, :edit, :delete]
+ before_filter :check_api_readable, :only => [:api_details, :api_data]
+ before_filter :check_api_writable, :only => [:api_create]
+ before_filter :require_allow_read_gpx, :only => [:api_details, :api_data]
+ before_filter :require_allow_write_gpx, :only => [:api_create]
+ before_filter :offline_warning, :only => [:mine, :view]
+ before_filter :offline_redirect, :only => [:create, :edit, :delete, :data, :api_data, :api_create]
+ around_filter :api_call_handle_error, :only => [:api_details, :api_data, :api_create]
+
+ caches_action :list, :unless => :logged_in?, :layout => false
+ caches_action :view, :layout => false
+ caches_action :georss, :layout => true
+ cache_sweeper :trace_sweeper, :only => [:create, :edit, :delete, :api_create], :unless => OSM_STATUS == :database_offline
+ cache_sweeper :tracetag_sweeper, :only => [:create, :edit, :delete, :api_create], :unless => OSM_STATUS == :database_offline
+
+ # 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
+ def list(target_user = nil, action = "list")
+ # 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 => { :status => ["active", "confirmed"], :display_name => display_name })
+ if target_user.nil?
+ @title = t'trace.no_such_user.title'
+ @not_found_user = display_name
+ render :action => 'no_such_user', :status => :not_found
+ return
+ end
+ end
+
+ # set title
+ if target_user.nil?
+ @title = t 'trace.list.public_traces'
+ elsif @user and @user == target_user
+ @title = t 'trace.list.your_traces'