Skip to content

Commit 6e79197

Browse files
committed
Enum site settings can have translatable names in dropdown. Add setting for how often users get digest emails by default: default_digest_email_frequency.
1 parent ee4ffe7 commit 6e79197

18 files changed

Lines changed: 135 additions & 16 deletions

app/assets/javascripts/admin/models/site_setting.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,17 @@ Discourse.SiteSetting = Discourse.Model.extend({
8181
},
8282

8383
validValues: function() {
84-
var vals;
84+
var vals, setting;
8585
vals = Em.A();
86+
setting = this;
8687
_.each(this.get('valid_values'), function(v) {
87-
if(v.length > 0) vals.addObject({ name: v, value: v });
88+
if (v.name && v.name.length > 0) {
89+
if (setting.translate_names) {
90+
vals.addObject({name: I18n.t(v.name), value: v.value});
91+
} else {
92+
vals.addObject(v);
93+
}
94+
}
8895
});
8996
return vals;
9097
}.property('valid_values'),
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
require_dependency 'enum_site_setting'
2+
3+
class DigestEmailSiteSetting < EnumSiteSetting
4+
5+
def self.valid_value?(val)
6+
val.blank? or values.any? { |v| v[:value] == val.to_s }
7+
end
8+
9+
def self.values
10+
@values ||= [
11+
{name: 'never', value: '' },
12+
{name: 'daily', value: '1' },
13+
{name: 'weekly', value: '7' },
14+
{name: 'every_two_weeks', value: '14' }
15+
]
16+
end
17+
18+
def self.translate_names?
19+
true
20+
end
21+
22+
end

app/models/locale_site_setting.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
class LocaleSiteSetting
1+
require_dependency 'enum_site_setting'
2+
3+
class LocaleSiteSetting < EnumSiteSetting
24

35
def self.valid_value?(val)
46
supported_locales.include?(val)
57
end
68

79
def self.values
8-
supported_locales
10+
supported_locales.map do |l|
11+
{name: l, value: l}
12+
end
913
end
1014

1115

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,25 @@
1-
class S3RegionSiteSetting
1+
require_dependency 'enum_site_setting'
2+
3+
class S3RegionSiteSetting < EnumSiteSetting
24
def self.valid_value?(val)
3-
values.include? val
5+
valid_values.include? val
46
end
57

68
def self.values
7-
@values ||= ['', 'us-east-1', 'us-west-1', 'us-west-2', 'eu-west-1', 'ap-southeast-1', 'ap-southeast-2', 'ap-northeast-1', 'sa-east-1'].sort
9+
@values ||= valid_values.sort.map {|x| {name: x, value: x} }
10+
end
11+
12+
private
13+
14+
def self.valid_values
15+
[ '',
16+
'us-east-1',
17+
'us-west-1',
18+
'us-west-2',
19+
'eu-west-1',
20+
'ap-southeast-1',
21+
'ap-southeast-2',
22+
'ap-northeast-1',
23+
'sa-east-1' ]
824
end
925
end

app/models/site_setting.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ class SiteSetting < ActiveRecord::Base
115115

116116
setting(:email_time_window_mins, 10)
117117
setting(:email_posts_context, 5)
118+
setting(:default_digest_email_frequency, '7', enum: 'DigestEmailSiteSetting')
118119

119120
# How many characters we can import into a onebox
120121
setting(:onebox_max_chars, 5000)

app/models/user.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class User < ActiveRecord::Base
5555
before_save :update_username_lower
5656
before_save :ensure_password_is_hashed
5757
after_initialize :add_trust_level
58+
after_initialize :set_default_email_digest
5859

5960
after_save :update_tracked_topics
6061

@@ -598,6 +599,17 @@ def send_approval_email
598599
)
599600
end
600601

602+
def set_default_email_digest
603+
if has_attribute?(:email_digests) && self.email_digests.nil?
604+
if SiteSetting.default_digest_email_frequency.blank?
605+
self.email_digests = false
606+
else
607+
self.email_digests = true
608+
self.digest_after_days ||= SiteSetting.default_digest_email_frequency.to_i if has_attribute?(:digest_after_days)
609+
end
610+
end
611+
end
612+
601613
private
602614

603615
def self.discourse_hub_nickname_operation

config/locales/client.en.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ en:
100100
read_more: 'read more'
101101
more: "More"
102102
less: "Less"
103+
never: "never"
104+
daily: "daily"
105+
weekly: "weekly"
106+
every_two_weeks: "every two weeks"
103107
character_count:
104108
one: "{{count}} character"
105109
other: "{{count}} characters"
@@ -1342,3 +1346,4 @@ en:
13421346
reset: 'reset to default'
13431347
none: 'none'
13441348

1349+

config/locales/server.en.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,7 @@ en:
667667

668668
allow_uploaded_avatars: "Allow users to upload their custom avatars"
669669
allow_animated_avatars: "Allow users to use animated gif for avatars"
670+
default_digest_email_frequency: "How often users receive digest emails by default. They can change this setting in their preferences."
670671

671672
notification_types:
672673
mentioned: "%{display_username} mentioned you in %{link}"
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class DropDefaultsOnEmailDigestColumnsOfUsers < ActiveRecord::Migration
2+
def up
3+
change_column_default :users, :email_digests, nil
4+
change_column :users, :digest_after_days, :integer, default: nil, null: true
5+
end
6+
7+
def down
8+
change_column_default :users, :email_digests, true
9+
change_column_default :users, :digest_after_days, 7
10+
change_column :users, :digest_after_days, :integer, default: 7, null: false
11+
end
12+
end

lib/enum_site_setting.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class EnumSiteSetting
2+
def self.translate_names?
3+
false
4+
end
5+
end

0 commit comments

Comments
 (0)