diff --git a/app/controllers/amf_controller.rb b/app/controllers/amf_controller.rb index aa030ca92..1e87e47c2 100644 --- a/app/controllers/amf_controller.rb +++ b/app/controllers/amf_controller.rb @@ -149,10 +149,10 @@ class AmfController < ApplicationController private - def amf_handle_error(call) + def amf_handle_error(call,rootobj,rootid) yield rescue OSM::APIVersionMismatchError => ex - return [-3, [ex.type.downcase, ex.latest, ex.id]] + return [-3, [rootobj, rootid], [ex.type.downcase, ex.id, ex.latest]] rescue OSM::APIUserChangesetMismatchError => ex return [-2, ex.to_s] rescue OSM::APIBadBoundingBox => ex @@ -163,8 +163,8 @@ class AmfController < ApplicationController return [-2, "An unusual error happened (in #{call}). The server said: #{ex.to_s}"] end - def amf_handle_error_with_timeout(call) - amf_handle_error(call) do + def amf_handle_error_with_timeout(call,rootobj,rootid) + amf_handle_error(call,rootobj,rootid) do Timeout::timeout(APP_CONFIG['api_timeout'], OSM::APITimeoutError) do yield end @@ -175,7 +175,7 @@ class AmfController < ApplicationController # Returns success_code,success_message,changeset id def startchangeset(usertoken, cstags, closeid, closecomment, opennew) - amf_handle_error("'startchangeset'") do + amf_handle_error("'startchangeset'",nil,nil) do user = getuser(usertoken) if !user then return -1,"You are not logged in, so Potlatch can't write any changes to the database." end @@ -253,7 +253,7 @@ class AmfController < ApplicationController # used in any way, rel is any relation which refers to either a way # or node that we're returning. def whichways(xmin, ymin, xmax, ymax) #:doc: - amf_handle_error_with_timeout("'whichways'") do + amf_handle_error_with_timeout("'whichways'",nil,nil) do enlarge = [(xmax-xmin)/8,0.01].min xmin -= enlarge; ymin -= enlarge xmax += enlarge; ymax += enlarge @@ -293,7 +293,7 @@ class AmfController < ApplicationController # with a deleted node only - not POIs or relations). def whichways_deleted(xmin, ymin, xmax, ymax) #:doc: - amf_handle_error_with_timeout("'whichways_deleted'") do + amf_handle_error_with_timeout("'whichways_deleted'",nil,nil) do enlarge = [(xmax-xmin)/8,0.01].min xmin -= enlarge; ymin -= enlarge xmax += enlarge; ymax += enlarge @@ -313,7 +313,7 @@ class AmfController < ApplicationController # Returns the way id, a Potlatch-style array of points, a hash of tags, the version number, and the user ID. def getway(wayid) #:doc: - amf_handle_error_with_timeout("'getway' #{wayid}") do + amf_handle_error_with_timeout("'getway' #{wayid}" ,'way',wayid) do if POTLATCH_USE_SQL then points = sql_get_nodes_in_way(wayid) tags = sql_get_tags_in_way(wayid) @@ -358,7 +358,7 @@ class AmfController < ApplicationController # 5. is this the current, visible version? (boolean) def getway_old(id, timestamp) #:doc: - amf_handle_error_with_timeout("'getway_old' #{id}, #{timestamp}") do + amf_handle_error_with_timeout("'getway_old' #{id}, #{timestamp}", 'way',id) do if timestamp == '' # undelete old_way = OldWay.find(:first, :conditions => ['visible = ? AND id = ?', true, id], :order => 'version DESC') @@ -458,7 +458,7 @@ class AmfController < ApplicationController # Returns array listing GPXs, each one comprising id, name and description. def findgpx(searchterm, usertoken) - amf_handle_error_with_timeout("'findgpx'") do + amf_handle_error_with_timeout("'findgpx'" ,nil,nil) do user = getuser(usertoken) if !uid then return -1,"You must be logged in to search for GPX traces.",[] end @@ -487,7 +487,7 @@ class AmfController < ApplicationController # 5. version. def getrelation(relid) #:doc: - amf_handle_error("'getrelation' #{relid}") do + amf_handle_error("'getrelation' #{relid}" ,'relation',relid) do rel = Relation.find(:first, :conditions => { :id => relid }) return [-4, 'relation', relid, {}, [], nil] if rel.nil? or !rel.visible @@ -523,7 +523,7 @@ class AmfController < ApplicationController # 3. version. def putrelation(renumberednodes, renumberedways, usertoken, changeset_id, version, relid, tags, members, visible) #:doc: - amf_handle_error("'putrelation' #{relid}") do + amf_handle_error("'putrelation' #{relid}" ,'relation',relid) do user = getuser(usertoken) if !user then return -1,"You are not logged in, so the relation could not be saved." end if !tags_ok(tags) then return -1,"One of the tags is invalid. Please pester Adobe to fix Flash on Linux." end @@ -608,7 +608,7 @@ class AmfController < ApplicationController # 6. hash of node versions (node=>version) def putway(renumberednodes, usertoken, changeset_id, wayversion, originalway, pointlist, attributes, nodes, deletednodes) #:doc: - amf_handle_error("'putway' #{originalway}") do + amf_handle_error("'putway' #{originalway}" ,'way',originalway) do # -- Initialise user = getuser(usertoken) @@ -714,7 +714,7 @@ class AmfController < ApplicationController # 4. version. def putpoi(usertoken, changeset_id, version, id, lon, lat, tags, visible) #:doc: - amf_handle_error("'putpoi' #{id}") do + amf_handle_error("'putpoi' #{id}", 'node',id) do user = getuser(usertoken) if !user then return -1,"You are not logged in, so the point could not be saved." end if !tags_ok(tags) then return -1,"One of the tags is invalid. Please pester Adobe to fix Flash on Linux." end @@ -769,7 +769,7 @@ class AmfController < ApplicationController # Returns array of id, long, lat, hash of tags, (current) version. def getpoi(id,timestamp) #:doc: - amf_handle_error("'getpoi' #{id}") do + amf_handle_error("'getpoi' #{id}" ,'node',id) do id = id.to_i n = Node.find(id) v = n.version @@ -796,7 +796,7 @@ class AmfController < ApplicationController # Returns 0 (success), unchanged way id, new way version, new node versions. def deleteway(usertoken, changeset_id, way_id, way_version, deletednodes) #:doc: - amf_handle_error("'deleteway' #{way_id}") do + amf_handle_error("'deleteway' #{way_id}" ,'way',id) do user = getuser(usertoken) unless user then return -1,"You are not logged in, so the way could not be deleted." end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d9bc9e4f1..6dbe9165c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -143,9 +143,12 @@ class ApplicationController < ActionController::Base end def set_locale + response.header['Vary'] = 'Accept-Language' + if @user if !@user.languages.empty? request.user_preferred_languages = @user.languages + response.header['Vary'] = '*' elsif !request.user_preferred_languages.empty? @user.languages = request.user_preferred_languages @user.save diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index 4d9c6839e..c67f4abd5 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -282,11 +282,11 @@ class ChangesetController < ApplicationController if bbox conditions = cond_merge conditions, conditions_bbox(bbox) bbox = BoundingBox.from_s(bbox) - bbox_link = "#{bbox.to_s}" + bbox_link = render_to_string :partial => "bbox", :object => bbox end if user - user_link = "#{user.display_name}" + user_link = render_to_string :partial => "user", :object => user end if user and bbox diff --git a/app/controllers/node_controller.rb b/app/controllers/node_controller.rb index 416ae28eb..33e0ed3ee 100644 --- a/app/controllers/node_controller.rb +++ b/app/controllers/node_controller.rb @@ -39,7 +39,7 @@ class NodeController < ApplicationController new_node = Node.from_xml(request.raw_post) unless new_node and new_node.id == node.id - raise OSM::BadUserInput.new("The id in the url (#{node.id}) is not the same as provided in the xml (#{new_node.id})") + raise OSM::APIBadUserInput.new("The id in the url (#{node.id}) is not the same as provided in the xml (#{new_node.id})") end node.update_from(new_node, @user) render :text => node.version.to_s, :content_type => "text/plain" @@ -53,7 +53,7 @@ class NodeController < ApplicationController new_node = Node.from_xml(request.raw_post) unless new_node and new_node.id == node.id - raise OSM::BadUserInput.new("The id in the url (#{node.id}) is not the same as provided in the xml (#{new_node.id})") + raise OSM::APIBadUserInput.new("The id in the url (#{node.id}) is not the same as provided in the xml (#{new_node.id})") end node.delete_with_history!(new_node, @user) render :text => node.version.to_s, :content_type => "text/plain" @@ -64,7 +64,7 @@ class NodeController < ApplicationController ids = params['nodes'].split(',').collect { |n| n.to_i } if ids.length == 0 - raise OSM::BadUserInput.new("No nodes were given to search for") + raise OSM::APIBadUserInput.new("No nodes were given to search for") end doc = OSM::API.new.get_xml_doc diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 6f57f4f4a..86b715154 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -112,8 +112,9 @@ class UserController < ApplicationController token = UserToken.find_by_token(params[:token]) if token + @user = token.user + if params[:user] - @user = token.user @user.pass_crypt = params[:user][:pass_crypt] @user.pass_crypt_confirmation = params[:user][:pass_crypt_confirmation] @user.active = true diff --git a/app/views/changeset/_bbox.atom.builder b/app/views/changeset/_bbox.atom.builder new file mode 100644 index 000000000..de3b1f112 --- /dev/null +++ b/app/views/changeset/_bbox.atom.builder @@ -0,0 +1 @@ +xml.a(bbox.to_s, :href => url_for(:controller => "site", :action => "index", :minlon => bbox.min_lon, :minlat => bbox.min_lat, :maxlon => bbox.max_lon, :maxlat => bbox.max_lat, :box => "yes")) diff --git a/app/views/changeset/_bbox.html.erb b/app/views/changeset/_bbox.html.erb new file mode 100644 index 000000000..f9424befd --- /dev/null +++ b/app/views/changeset/_bbox.html.erb @@ -0,0 +1 @@ +<%= link_to bbox.to_s, :controller => "site", :action => "index", :minlon => bbox.min_lon, :minlat => bbox.min_lat, :maxlon => bbox.max_lon, :maxlat => bbox.max_lat, :box => "yes" %> diff --git a/app/views/changeset/_user.atom.builder b/app/views/changeset/_user.atom.builder new file mode 100644 index 000000000..61faea97f --- /dev/null +++ b/app/views/changeset/_user.atom.builder @@ -0,0 +1 @@ +xml.a(user.display_name, :href => url_for(:controller => "user", :action => "view", :display_name => user.display_name)) diff --git a/app/views/changeset/_user.html.erb b/app/views/changeset/_user.html.erb new file mode 100644 index 000000000..0e9507650 --- /dev/null +++ b/app/views/changeset/_user.html.erb @@ -0,0 +1 @@ +<%= link_to user.display_name, :controller => "user", :action => "view", :display_name => user.display_name %> diff --git a/app/views/user/reset_password.html.erb b/app/views/user/reset_password.html.erb index 458a6084c..7d2da5c78 100644 --- a/app/views/user/reset_password.html.erb +++ b/app/views/user/reset_password.html.erb @@ -1,12 +1,12 @@ -
<%= t 'user.reset_password.password' %> | <%= password_field(:user, :pass_crypt,{:size => 30, :maxlength => 255, :tabindex => 4}) %> |
<%= t 'user.reset_password.confirm password' %> | <%= password_field(:user, :pass_crypt_confirmation,{:size => 30, :maxlength => 255, :tabindex => 5}) %> |
<%= t 'user.reset_password.password' %> | <%= password_field(:user, :pass_crypt, {:value => '', :size => 30, :maxlength => 255, :tabindex => 4}) %> |
<%= t 'user.reset_password.confirm password' %> | <%= password_field(:user, :pass_crypt_confirmation, {:value => '', :size => 30, :maxlength => 255, :tabindex => 5}) %> |