X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/9e3dc420f334c936c6d4287a0898cebc2177a852..d2dc1ff8978a3ed9636c172a7e3cfb8e3d83410b:/app/helpers/banner_helper.rb diff --git a/app/helpers/banner_helper.rb b/app/helpers/banner_helper.rb index af7d5a643..9048d4840 100644 --- a/app/helpers/banner_helper.rb +++ b/app/helpers/banner_helper.rb @@ -1,47 +1,59 @@ module BannerHelper + def active_banners + BANNERS.reject do |_k, v| + begin + startdate = v[:startdate] && Date.parse(v[:startdate]) + rescue StandardError + startdate = nil + end + + begin + enddate = v[:enddate] && Date.parse(v[:enddate]) + rescue StandardError + enddate = nil + end - def active_banners() - BANNERS.reject do |k,v| - enddate = v[:enddate] - parsed = (enddate and Date.parse enddate rescue nil) - parsed.is_a?(Date) and parsed.past? + startdate&.future? || enddate&.past? end end # returns the least recently seen banner that is not hidden - def next_banner() - banners = active_banners() - bannerKey = nil - cookieKey = nil - queuePos = 9999 + def next_banner + banners = active_banners + banner_key = nil + cookie_key = nil + min_index = 9999 + min_date = Date.new(9999, 1, 1) banners.each do |k, v| - ckey = cookie_id(v[:id]).to_sym + ckey = banner_cookie(v[:id]).to_sym cval = cookies[ckey] || 0 - next if cval == 'hide' + next if cval == "hide" # rotate all banner queue positions index = cval.to_i - if index > 0 - cookies[ckey] = index - 1 - end + cookies[ckey] = index - 1 if index.positive? - # pick banner with mininum queue position - if index <= queuePos - bannerKey = k - cookieKey = ckey - queuePos = index - end + # pick banner with minimum queue position + next if index > min_index + + # or if equal queue position, pick banner with soonest end date (i.e. next expiring) + end_date = Date.parse(v[:enddate]) + next if index == min_index && end_date > min_date + + banner_key = k + cookie_key = ckey + min_index = index + min_date = end_date end - unless bannerKey.nil? - cookies[cookieKey] = banners.length # bump to end of queue - banners[bannerKey] + unless banner_key.nil? + cookies[cookie_key] = banners.length # bump to end of queue + banners[banner_key] end end - def cookie_id(key) + def banner_cookie(key) "_osm_banner_#{key}" end - end