]> git.openstreetmap.org Git - rails.git/commitdiff
Merge oauth branch at r17138 to trunk.
authorTom Hughes <tom@compton.nu>
Tue, 18 Aug 2009 20:02:52 +0000 (20:02 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 18 Aug 2009 20:02:52 +0000 (20:02 +0000)
app/controllers/application_controller.rb
app/controllers/diary_entry_controller.rb
app/controllers/trace_controller.rb
app/models/changeset.rb
app/views/site/edit.html.erb
config/locales/sl.yml
test/functional/changeset_controller_test.rb

index 6dbe9165ca2593b20f5fff3c7e6c46f7469016e6..c43271b93a81faf5b3426a75097ac5fc1053f0e5 100644 (file)
@@ -174,6 +174,8 @@ class ApplicationController < ActionController::Base
     rescue OSM::APIError => ex
       report_error ex.message, ex.status
     rescue Exception => ex
+      logger.info("API threw unexpected #{ex.class} exception: #{ex.message}")
+      ex.backtrace.each { |l| logger.info(l) }
       report_error "#{ex.class}: #{ex.message}", :internal_server_error
     end
   end
index 52e287b9a1d9fe65ad55038e6f6542a5c6276b39..112b80182fdbb93afcb4c12064a8cd66df93a31a 100644 (file)
@@ -113,8 +113,8 @@ class DiaryEntryController < ApplicationController
       @entries = DiaryEntry.find(:all, :include => :user,
         :conditions => ["users.visible = ? AND diary_entries.language_code = ?", true, params[:language]],
         :order => 'created_at DESC', :limit => 20)
-      @title = I18n.t('diary_entry.feed.language.title', Language.find(params[:language]).english_name)
-      @description = I18n.t('diary_entry.feed.language.description', Language.find(params[:language]).english_name)
+      @title = I18n.t('diary_entry.feed.language.title', :language_name => Language.find(params[:language]).english_name, :locale => I18n.locale)
+      @description = I18n.t('diary_entry.feed.language.description', :language_name => Language.find(params[:language]).english_name, :locale => I18n.locale)
       @link = "http://#{SERVER_URL}/diary/#{params[:language]}"
     else
       @entries = DiaryEntry.find(:all, :include => :user,
index f06a162fbc00b850d03b971cc7a59ae9ad60ec62..10aecd4adc7733e8c2309253bbbed6d5ad2f4b02 100644 (file)
@@ -45,15 +45,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
-        conditions = ["(gpx_files.visibility <> 'private' OR gpx_files.user_id = ?)", @user.id] #1
+        conditions = ["(gpx_files.visibility in ('public', 'identifiable') OR gpx_files.user_id = ?)", @user.id] #1
       else
-        conditions  = ["gpx_files.visibility <> 'private'"] #2
+        conditions  = ["gpx_files.visibility in ('public', 'identifiable')"] #2
       end
     else
       if @user and @user == target_user
         conditions = ["gpx_files.user_id = ?", @user.id] #3 (check vs user id, so no join + can't pick up non-public traces by changing name)
       else
-        conditions = ["gpx_files.public <> 'private' AND gpx_files.user_id = ?", target_user.id] #4
+        conditions = ["gpx_files.visibility in ('public', 'identifiable') AND gpx_files.user_id = ?", target_user.id] #4
       end
     end
     
@@ -207,7 +207,7 @@ class TraceController < ApplicationController
   end
 
   def georss
-    conditions = ["gpx_files.visibility <> 'private'"]
+    conditions = ["gpx_files.visibility in ('public', 'identifiable')"]
 
     if params[:display_name]
       conditions[0] += " AND users.display_name = ?"
index 5c961a06470c1999d74df7565707559956811135..4efd4f9e7f755e0655d4ee89f55bfcf989e6ed62 100644 (file)
@@ -112,10 +112,10 @@ class Changeset < ActiveRecord::Base
 
     # FIXME - this looks nasty and violates DRY... is there any prettier 
     # way to do this? 
-    @bbox[0] = array[0] + EXPAND * (@bbox[0] - @bbox[2]) if array[0] < @bbox[0]
-    @bbox[1] = array[1] + EXPAND * (@bbox[1] - @bbox[3]) if array[1] < @bbox[1]
-    @bbox[2] = array[2] + EXPAND * (@bbox[2] - @bbox[0]) if array[2] > @bbox[2]
-    @bbox[3] = array[3] + EXPAND * (@bbox[3] - @bbox[1]) if array[3] > @bbox[3]
+    @bbox[0] = [-180 * GeoRecord::SCALE, array[0] + EXPAND * (@bbox[0] - @bbox[2])].max if array[0] < @bbox[0]
+    @bbox[1] = [ -90 * GeoRecord::SCALE, array[1] + EXPAND * (@bbox[1] - @bbox[3])].max if array[1] < @bbox[1]
+    @bbox[2] = [ 180 * GeoRecord::SCALE, array[2] + EXPAND * (@bbox[2] - @bbox[0])].min if array[2] > @bbox[2]
+    @bbox[3] = [  90 * GeoRecord::SCALE, array[3] + EXPAND * (@bbox[3] - @bbox[1])].min if array[3] > @bbox[3]
 
     # update active record. rails 2.1's dirty handling should take care of
     # whether this object needs saving or not.
index 142d7a3f312f1678b2a890c49bd7ab4144a1658e..79b1f64af3d6da3dfb9418dae2931e06f0bea92d 100644 (file)
@@ -12,7 +12,7 @@
 <% else %>
 <% content_for :greeting do %>
 <% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
-<%= link_to_function 'home', "setPosition(#{@user.home_lat}, #{@user.home_lon}, 10)" %> |
+<%= link_to_function t('layouts.home'), "setPosition(#{@user.home_lat}, #{@user.home_lon}, 10)", { :title => t('layouts.home_tooltip') } %> |
 <% end %>
 <% end %>
 
index db249f264f306c1de6c1a2defaf8b1a26925c058..f79a9c1cf5b6840bb01cbf2891f2eb4e6e58b747 100644 (file)
@@ -322,6 +322,16 @@ sl:
       edit_link: Uredi ta vnos
     diary_comment:
       comment_from: "Komentar uporabnika {{link_user}} v {{comment_created_at}}"
+    feed:
+      user:
+        title: "Dnevnik OpenStreetMap uporabnika {{user}}"
+        description: "Nedavni zapisi v dnevnik OpenStreetmap uporabnika {{user}}"
+      language:
+        title: "Dnevnik OpenStreetMap v jeziku {{language_name}}"
+        description: "Nedavni zapisi v dnevnik uporabnikov OpenStreetmap v jeziku {{language_name}}"
+      all:
+        title: "Dnevnik OpenStreetMap"
+        description: "Nedavni zapisi v dnevnik uporabnikov OpenStreetmap"
   export:
     start:
       area_to_export: "Področje za izvoz"
index 46f8a1a6a6990ed0a34658018399a06db8f312b8..b02f556c9faf04c5cb6a556f88ab6037206df5b1 100644 (file)
@@ -419,6 +419,57 @@ EOF
     end
   end
 
+  def test_upload_large_changeset
+    basic_authorization users(:public_user).email, "test"
+
+    # create a changeset
+    content "<osm><changeset/></osm>"
+    put :create
+    assert_response :success, "Should be able to create a changeset: #{@response.body}"
+    changeset_id = @response.body.to_i
+    
+    # upload some widely-spaced nodes, spiralling positive and negative to cause 
+    # largest bbox over-expansion possible.
+    diff = <<EOF
+<osmChange>
+ <create>
+  <node id='-1' lon='-20' lat='-10' changeset='#{changeset_id}'/>
+  <node id='-10' lon='20'  lat='10' changeset='#{changeset_id}'/>
+  <node id='-2' lon='-40' lat='-20' changeset='#{changeset_id}'/>
+  <node id='-11' lon='40'  lat='20' changeset='#{changeset_id}'/>
+  <node id='-3' lon='-60' lat='-30' changeset='#{changeset_id}'/>
+  <node id='-12' lon='60'  lat='30' changeset='#{changeset_id}'/>
+  <node id='-4' lon='-80' lat='-40' changeset='#{changeset_id}'/>
+  <node id='-13' lon='80'  lat='40' changeset='#{changeset_id}'/>
+  <node id='-5' lon='-100' lat='-50' changeset='#{changeset_id}'/>
+  <node id='-14' lon='100'  lat='50' changeset='#{changeset_id}'/>
+  <node id='-6' lon='-120' lat='-60' changeset='#{changeset_id}'/>
+  <node id='-15' lon='120'  lat='60' changeset='#{changeset_id}'/>
+  <node id='-7' lon='-140' lat='-70' changeset='#{changeset_id}'/>
+  <node id='-16' lon='140'  lat='70' changeset='#{changeset_id}'/>
+  <node id='-8' lon='-160' lat='-80' changeset='#{changeset_id}'/>
+  <node id='-17' lon='160'  lat='80' changeset='#{changeset_id}'/>
+  <node id='-9' lon='-179.9' lat='-89.9' changeset='#{changeset_id}'/>
+  <node id='-18' lon='179.9'  lat='89.9' changeset='#{changeset_id}'/>
+ </create>
+</osmChange>
+EOF
+
+    # upload it, which used to cause an error like "PGError: ERROR: 
+    # integer out of range" (bug #2152). but shouldn't any more.
+    content diff
+    post :upload, :id => changeset_id
+    assert_response :success, 
+      "can't upload a spatially-large diff to changeset: #{@response.body}"
+
+    # check that the changeset bbox is within bounds
+    cs = Changeset.find(changeset_id)
+    assert cs.min_lon >= -180 * SCALE, "Minimum longitude (#{cs.min_lon / SCALE}) should be >= -180 to be valid."
+    assert cs.max_lon <=  180 * SCALE, "Maximum longitude (#{cs.max_lon / SCALE}) should be <= 180 to be valid."
+    assert cs.min_lat >=  -90 * SCALE, "Minimum latitude (#{cs.min_lat / SCALE}) should be >= -90 to be valid."
+    assert cs.max_lat >=   90 * SCALE, "Maximum latitude (#{cs.max_lat / SCALE}) should be <= 90 to be valid."
+  end
+
   ##
   # test that deleting stuff in a transaction doesn't bypass the checks
   # to ensure that used elements are not deleted.