FIX: display correct status on unsubscribe page (#10294)

There was a bug that even when `email_digest` was set to false but
`digest_after_minutes` was positive, we were not displaying correct
status.

In addition, the message is improved when the user is unsubscribed +
unsubscribe from all is hidden.
This commit is contained in:
Krzysztof Kotlarek
2020-07-23 16:20:10 +10:00
committed by GitHub
parent e027acd367
commit 4b053462c0
5 changed files with 47 additions and 12 deletions

View File

@ -24,6 +24,8 @@ class EmailController < ApplicationController
watching = TopicUser.notification_levels[:watching]
@unsubscribed_from_all = @user.user_option.unsubscribed_from_all?
if @topic
@watching_topic = TopicUser.exists?(user_id: @user.id, notification_level: watching, topic_id: @topic.id)
if @topic.category_id
@ -132,16 +134,17 @@ class EmailController < ApplicationController
def digest_frequencies(user)
frequency_in_minutes = user.user_option.digest_after_minutes
email_digests = user.user_option.email_digests
frequencies = DigestEmailSiteSetting.values.dup
never = frequencies.delete_at(0)
allowed_frequencies = %w[never weekly every_month every_six_months]
result = frequencies.reduce(frequencies: [], current: nil, selected: nil, take_next: false) do |memo, v|
memo[:current] = v[:name] if v[:value] == frequency_in_minutes
memo[:current] = v[:name] if v[:value] == frequency_in_minutes && email_digests
next(memo) unless allowed_frequencies.include?(v[:name])
memo.tap do |m|
m[:selected] = v[:value] if m[:take_next]
m[:selected] = v[:value] if m[:take_next] && email_digests
m[:frequencies] << [I18n.t("unsubscribe.digest_frequency.#{v[:name]}"), v[:value]]
m[:take_next] = !m[:take_next] && m[:current]
end