mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 14:44:31 +08:00
37 lines
1.1 KiB
Ruby
37 lines
1.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module ThemeResolver
|
||
|
def self.resolve_theme_id(request, guardian, current_user)
|
||
|
return request.env[:resolved_theme_id] if request.env[:resolved_theme_id] != nil
|
||
|
|
||
|
theme_id = nil
|
||
|
|
||
|
if (preview_theme_id = request[:preview_theme_id]&.to_i) &&
|
||
|
guardian.allow_themes?([preview_theme_id], include_preview: true)
|
||
|
theme_id = preview_theme_id
|
||
|
end
|
||
|
|
||
|
user_option = current_user&.user_option
|
||
|
|
||
|
if theme_id.blank? && request.cookie_jar[:theme_ids].present?
|
||
|
ids, seq = request.cookie_jar[:theme_ids]&.split("|")
|
||
|
id = ids&.split(",")&.map(&:to_i)&.first
|
||
|
if id.present? && seq && seq.to_i == user_option&.theme_key_seq.to_i
|
||
|
theme_id = id if guardian.allow_themes?([id])
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if theme_id.blank?
|
||
|
ids = user_option&.theme_ids || []
|
||
|
theme_id = ids.first if guardian.allow_themes?(ids)
|
||
|
end
|
||
|
|
||
|
if theme_id.blank? && SiteSetting.default_theme_id != -1 &&
|
||
|
guardian.allow_themes?([SiteSetting.default_theme_id])
|
||
|
theme_id = SiteSetting.default_theme_id
|
||
|
end
|
||
|
|
||
|
request.env[:resolved_theme_id] = theme_id
|
||
|
end
|
||
|
end
|