FIX: Don't store translated trust level names in anonymous cache (#13224)

Refactors `TrustLevel` and moves translations from server to client

Additional changes:
  * "staff" and "admin" wasn't translatable in site settings
  * it replaces a concatenated string with a translation
  * uses translation for trust levels in users_by_trust_level report
  * adds a DB migration to rename keys of translation overrides affected by this commit
This commit is contained in:
Gerhard Schlager
2021-06-01 22:11:48 +02:00
committed by GitHub
parent 409c8585e4
commit 41ee5b7c86
17 changed files with 144 additions and 88 deletions

View File

@@ -24,7 +24,7 @@ module Reports::UsersByTrustLevel
]
User.real.group('trust_level').count.sort.each do |level, count|
key = TrustLevel.levels[level.to_i]
key = TrustLevel.name(level.to_i)
url = Proc.new { |k| "/admin/users/list/#{k}" }
report.data << { url: url.call(key), key: key, x: level.to_i, y: count }
end

View File

@@ -21,7 +21,7 @@ class Site
end
def trust_levels
TrustLevel.all
TrustLevel.levels
end
def user_fields

View File

@@ -18,4 +18,12 @@ class TrustLevelAndStaffSetting < TrustLevelSetting
def self.special_groups
['staff', 'admin']
end
def self.translation(value)
if special_group?(value)
I18n.t("trust_levels.#{value}")
else
super
end
end
end

View File

@@ -8,18 +8,23 @@ class TrustLevelSetting < EnumSiteSetting
end
def self.values
levels = TrustLevel.all
valid_values.map { |x|
{
name: x.is_a?(Integer) ? "#{x}: #{levels[x.to_i].name}" : x,
value: x
}
}
valid_values.map do |value|
{ name: translation(value), value: value }
end
end
def self.valid_values
TrustLevel.valid_range.to_a
end
def self.translation(value)
I18n.t(
"js.trust_levels.detailed_name",
level: value,
name: TrustLevel.name(value)
)
end
private_class_method :valid_values
private_class_method :translation
end