From: Tom Hughes Date: Wed, 29 May 2019 16:41:08 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/2239' X-Git-Tag: live~2609 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/e49953f141a8a090e96652335882927ce872e375?hp=7fc00c9314b6d774616ec9bb298f7a4dd2c63b8d Merge remote-tracking branch 'upstream/pull/2239' --- diff --git a/app/controllers/diary_entries_controller.rb b/app/controllers/diary_entries_controller.rb index f02f4224f..1e113e09f 100644 --- a/app/controllers/diary_entries_controller.rb +++ b/app/controllers/diary_entries_controller.rb @@ -180,6 +180,10 @@ class DiaryEntriesController < ApplicationController else @entries = DiaryEntry.joins(:user).where(:users => { :status => %w[active confirmed] }) + # Items can't be flagged as deleted in the RSS format. + # For the general feeds, allow a delay before publishing, to help spam fighting + @entries = @entries.where("created_at < :time", :time => Settings.diary_feed_delay.hours.ago) + if params[:language] @entries = @entries.where(:language_code => params[:language]) @title = t("diary_entries.feed.language.title", :language_name => Language.find(params[:language]).english_name) @@ -191,7 +195,6 @@ class DiaryEntriesController < ApplicationController @link = url_for :action => "index", :host => Settings.server_url, :protocol => Settings.server_protocol end end - @entries = @entries.visible.includes(:user).order("created_at DESC").limit(20) end diff --git a/config/settings.yml b/config/settings.yml index 6031f0654..51d3ed2c9 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -57,6 +57,8 @@ nearby_users: 30 nearby_radius: 50 # Spam threshold spam_threshold: 50 +# Delay diary entries from appearing in the feed for this many hours +diary_feed_delay: 0 # Default legale (jurisdiction location) for contributor terms default_legale: GB # Use the built-in jobs queue for importing traces diff --git a/config/settings/test.yml b/config/settings/test.yml index 022c93246..e9a506c41 100644 --- a/config/settings/test.yml +++ b/config/settings/test.yml @@ -1,6 +1,8 @@ # Trace directories for testing gpx_trace_dir: <%= Rails.root.join("test", "gpx", "traces") %> gpx_image_dir: <%= Rails.root.join("test", "gpx", "images") %> +# Ignore the diary feed delay unless we're specifically testing it +diary_feed_delay: 0 # Geonames credentials for testing geonames_username: "dummy" # External authentication credentials for testing diff --git a/test/controllers/diary_entries_controller_test.rb b/test/controllers/diary_entries_controller_test.rb index 88a67ef12..71684c65e 100644 --- a/test/controllers/diary_entries_controller_test.rb +++ b/test/controllers/diary_entries_controller_test.rb @@ -664,6 +664,18 @@ class DiaryEntriesControllerTest < ActionController::TestCase assert_match "<script>", response.body end + def test_feed_delay + create(:diary_entry, :created_at => 7.hours.ago) + create(:diary_entry, :created_at => 5.hours.ago) + get :rss, :params => { :format => :rss } + assert_select "rss>channel>item", :count => 2 + + with_diary_feed_delay(6) do + get :rss, :params => { :format => :rss } + assert_select "rss>channel>item", :count => 1 + end + end + def test_show user = create(:user) suspended_user = create(:user, :suspended) @@ -897,4 +909,13 @@ class DiaryEntriesControllerTest < ActionController::TestCase assert_select "a[href=?]", "/user/#{ERB::Util.u(entry.user.display_name)}/diary/#{entry.id}" end end + + def with_diary_feed_delay(value) + diary_feed_delay = Settings.diary_feed_delay + Settings.diary_feed_delay = value + + yield + + Settings.diary_feed_delay = diary_feed_delay + end end