2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-02-17 13:10:30 +08:00
|
|
|
class MaxEmojisValidator < ActiveModel::EachValidator
|
|
|
|
|
|
|
|
def validate_each(record, attribute, value)
|
2018-10-19 22:58:35 +08:00
|
|
|
unescaped_title = PrettyText.unescape_emoji(Emoji.unicode_unescape(CGI::escapeHTML(value)))
|
2018-10-22 17:38:26 +08:00
|
|
|
if unescaped_title.present? && unescaped_title.scan(/<img.+?class\s*=\s*'(emoji|emoji emoji-custom)'/).size > SiteSetting.max_emojis_in_title
|
2018-02-17 13:10:30 +08:00
|
|
|
record.errors.add(
|
2018-10-19 22:58:35 +08:00
|
|
|
attribute, SiteSetting.max_emojis_in_title > 0 ? :max_emojis : :emojis_disabled,
|
2018-02-17 13:10:30 +08:00
|
|
|
max_emojis_count: SiteSetting.max_emojis_in_title
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|