X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/6f89da05d1741ac66deab93aea64b76dc1e9b8fb..646dcb62fca67b6dd52d8a46fef5fc260baa4b83:/app/controllers/trace_controller.rb diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index eaeb4f5d0..81c786473 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -112,16 +112,14 @@ class TraceController < ApplicationController begin do_create(params[:trace][:gpx_file], params[:trace][:tagstring], params[:trace][:description], params[:trace][:visibility]) - rescue => ex + rescue StandardError => ex logger.debug ex end if @trace.id flash[:notice] = t "trace.create.trace_uploaded" - if current_user.traces.where(:inserted => false).count > 4 - flash[:warning] = t "trace.trace_header.traces_waiting", :count => current_user.traces.where(:inserted => false).count - end + flash[:warning] = t "trace.trace_header.traces_waiting", :count => current_user.traces.where(:inserted => false).count if current_user.traces.where(:inserted => false).count > 4 redirect_to :action => :list, :display_name => current_user.display_name end @@ -149,9 +147,9 @@ class TraceController < ApplicationController if Acl.no_trace_download(request.remote_ip) head :forbidden elsif request.format == Mime[:xml] - send_file(trace.xml_file, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment") + send_data(trace.xml_file.read, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment") elsif request.format == Mime[:gpx] - send_file(trace.xml_file, :filename => "#{trace.id}.gpx", :type => request.format.to_s, :disposition => "attachment") + send_data(trace.xml_file.read, :filename => "#{trace.id}.gpx", :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 @@ -176,9 +174,7 @@ class TraceController < ApplicationController @trace.description = params[:trace][:description] @trace.tagstring = params[:trace][:tagstring] @trace.visibility = params[:trace][:visibility] - if @trace.save - redirect_to :action => "view", :display_name => current_user.display_name - end + redirect_to :action => "view", :display_name => current_user.display_name if @trace.save end end rescue ActiveRecord::RecordNotFound @@ -190,7 +186,7 @@ class TraceController < ApplicationController if !trace.visible? head :not_found - elsif current_user.nil? || trace.user != current_user + elsif current_user.nil? || (trace.user != current_user && !current_user.administrator? && !current_user.moderator?) head :forbidden else trace.visible = false @@ -205,9 +201,7 @@ class TraceController < ApplicationController def georss @traces = Trace.visible_to_all.visible - if params[:display_name] - @traces = @traces.joins(:user).where(:users => { :display_name => params[:display_name] }) - end + @traces = @traces.joins(:user).where(:users => { :display_name => params[:display_name] }) if params[:display_name] @traces = @traces.tagged(params[:tag]) if params[:tag] @traces = @traces.order("timestamp DESC") @@ -263,15 +257,7 @@ class TraceController < ApplicationController trace = Trace.visible.find(params[:id]) if trace.user == current_user - new_trace = Trace.from_xml(request.raw_post) - - unless new_trace && new_trace.id == trace.id - raise OSM::APIBadUserInput.new("The id in the url (#{trace.id}) is not the same as provided in the xml (#{new_trace.id})") - end - - trace.description = new_trace.description - trace.tags = new_trace.tags - trace.visibility = new_trace.visibility + trace.update_from_xml(request.raw_post) trace.save! head :ok @@ -298,9 +284,9 @@ class TraceController < ApplicationController if trace.public? || trace.user == current_user if request.format == Mime[:xml] - send_file(trace.xml_file, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment") + send_data(trace.xml_file.read, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment") elsif request.format == Mime[:gpx] - send_file(trace.xml_file, :filename => "#{trace.id}.gpx", :type => request.format.to_s, :disposition => "attachment") + send_data(trace.xml_file.read, :filename => "#{trace.id}.gpx", :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