diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb
index 021ada0cd..81b8bca53 100644
--- a/app/controllers/api_controller.rb
+++ b/app/controllers/api_controller.rb
@@ -67,7 +67,7 @@ class ApiController < ApplicationController
if gpx_file.identifiable?
track << (XML::Node.new("name") << gpx_file.name)
track << (XML::Node.new("desc") << gpx_file.description)
- track << (XML::Node.new("url") << url_for(:controller => "traces", :action => "view", :display_name => gpx_file.user.display_name, :id => gpx_file.id))
+ track << (XML::Node.new("url") << url_for(:controller => "traces", :action => "show", :display_name => gpx_file.user.display_name, :id => gpx_file.id))
end
else
# use the anonymous track segment if the user hasn't allowed
diff --git a/app/controllers/traces_controller.rb b/app/controllers/traces_controller.rb
index ab4c8f3b8..c77d884b3 100644
--- a/app/controllers/traces_controller.rb
+++ b/app/controllers/traces_controller.rb
@@ -12,13 +12,13 @@ class TracesController < ApplicationController
before_action :check_api_writable, :only => [:api_create, :api_update, :api_delete]
before_action :require_allow_read_gpx, :only => [:api_read, :api_data]
before_action :require_allow_write_gpx, :only => [:api_create, :api_update, :api_delete]
- before_action :offline_warning, :only => [:mine, :view]
+ before_action :offline_warning, :only => [:mine, :show]
before_action :offline_redirect, :only => [:new, :create, :edit, :delete, :data, :api_create, :api_delete, :api_data]
around_action :api_call_handle_error, :only => [:api_create, :api_read, :api_update, :api_delete, :api_data]
# 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
+ def index
# from display name, pick up user id if one user's traces only
display_name = params[:display_name]
if display_name.present?
@@ -86,10 +86,10 @@ class TracesController < ApplicationController
end
def mine
- redirect_to :action => :list, :display_name => current_user.display_name
+ redirect_to :action => :index, :display_name => current_user.display_name
end
- def view
+ def show
@trace = Trace.find(params[:id])
if @trace && @trace.visible? &&
@@ -97,11 +97,11 @@ class TracesController < ApplicationController
@title = t ".title", :name => @trace.name
else
flash[:error] = t ".trace_not_found"
- redirect_to :action => "list"
+ redirect_to :action => "index"
end
rescue ActiveRecord::RecordNotFound
flash[:error] = t ".trace_not_found"
- redirect_to :action => "list"
+ redirect_to :action => "index"
end
def new
@@ -126,7 +126,7 @@ class TracesController < ApplicationController
flash[:notice] = t ".trace_uploaded"
flash[:warning] = t ".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
+ redirect_to :action => :index, :display_name => current_user.display_name
else
flash[:error] = t("traces.create.upload_failed") if @trace.valid?
@@ -175,13 +175,24 @@ class TracesController < ApplicationController
head :forbidden
else
@title = t ".title", :name => @trace.name
+ end
+ rescue ActiveRecord::RecordNotFound
+ head :not_found
+ end
- if request.post? && params[:trace]
- @trace.description = params[:trace][:description]
- @trace.tagstring = params[:trace][:tagstring]
- @trace.visibility = params[:trace][:visibility]
- redirect_to :action => "view", :display_name => current_user.display_name if @trace.save
- end
+ def update
+ @trace = Trace.find(params[:id])
+
+ if !@trace.visible?
+ head :not_found
+ elsif current_user.nil? || @trace.user != current_user
+ head :forbidden
+ elsif @trace.update(trace_params)
+ flash[:notice] = t ".updated"
+ redirect_to :action => "show", :display_name => current_user.display_name
+ else
+ @title = t ".title", :name => @trace.name
+ render :action => "edit"
end
rescue ActiveRecord::RecordNotFound
head :not_found
@@ -198,7 +209,7 @@ class TracesController < ApplicationController
trace.visible = false
trace.save
flash[:notice] = t ".scheduled_for_deletion"
- redirect_to :action => :list, :display_name => trace.user.display_name
+ redirect_to :action => :index, :display_name => trace.user.display_name
end
rescue ActiveRecord::RecordNotFound
head :not_found
@@ -413,4 +424,8 @@ class TracesController < ApplicationController
"public"
end
end
+
+ def trace_params
+ params.require(:trace).permit(:description, :tagstring, :visibility)
+ end
end
diff --git a/app/views/traces/_trace.html.erb b/app/views/traces/_trace.html.erb
index 9b8b16a63..b81e19025 100644
--- a/app/views/traces/_trace.html.erb
+++ b/app/views/traces/_trace.html.erb
@@ -3,13 +3,13 @@
<% if STATUS != :gpx_offline %>
<% if trace.inserted %>
-
+
<% else %>
<%= t '.pending' %>
<% end %>
<% end %>
|
- <%= link_to trace.name, { :controller => 'traces', :action => 'view', :display_name => trace.user.display_name, :id => trace.id } %>
+ | <%= link_to trace.name, { :controller => 'traces', :action => 'show', :display_name => trace.user.display_name, :id => trace.id } %>
...
<% if trace.inserted %>
(<%= t '.count_points', :count => trace.size.to_s.gsub(/(\d)(?=(\d{3})+$)/,'\1,') %>)
diff --git a/app/views/traces/edit.html.erb b/app/views/traces/edit.html.erb
index 6657a33ad..b5b4a84d6 100644
--- a/app/views/traces/edit.html.erb
+++ b/app/views/traces/edit.html.erb
@@ -4,7 +4,7 @@
-<%= form_for @trace, :method => :post, :url => { :action => "edit" } do |f| %>
+<%= form_for @trace do |f| %>
|