возможно, у кого-то есть похожая проблема с плагином службы поддержки контактов Redmines и HTML парсингом почты.
В моем случае после последнего обновления на Redmine 4.0.6.stable и плагине helpdesk contacts v4.1.7 HTML письма обрабатывались без разрывов строк, что затрудняло чтение проблем ...
плагин helpdesk : https://www.redmine.org/plugins/redmine_contacts_helpdesk
Через некоторое время я обнаружил, что основной причиной было изменение по сравнению с предыдущим обновлением плагина. Конкретно анализ содержимого был изменен с «делать это внутри плагина» на «использование функциональности redmine base».
функция ссылки на код: helpdesk_mailer_support.rb строка 293 (метод plain_text_body)
Наконец, проблема заключалась в том, что базовая c функция redmine для анализа html использует Loofah.document(html)
с методом .text
вместо использования .to_text
.
Разница в том, что .text
выдаст lineAlineBlineC
, а .to_text
выдаст lineA\nlineB\nlineC
, что покажет разрывы строк в выпуске redmine.
Изменение кода (helpdesk_mail_support.rb):
if Redmine::VERSION.to_s < '3.1'
def html_body_to_text(html)
# strip html tags and remove doctype directive
html.gsub! %r{^[ ]+}, ''
if RedmineHelpdesk.strip_tags?
html.gsub! %r{<head>(?:.|\n|\r)+?<\/head>}, ''
html.gsub! %r{<\/(li|ol|ul|h1|h2|h3|h4)>}, "\r\n"
html.gsub! %r{<\/(p|div|pre)>}, "\r\n\r\n"
html.gsub! %r{<li>}, ' - '
html.gsub! %r{<br[^>]*>}, "\r\n"
html.sub! %r{^<!DOCTYPE .*$}, ''
html.strip
end
end
def plain_text_body_to_text(text)
text.gsub(/^ +(?![*#])/, '')
end
# change starts here
else
def html_body_to_text(html)
doc = Loofah.document(html)
Loofah.remove_extraneous_whitespace(doc.to_text(:encode_special_chars => false))
.strip.squeeze(' ')
.gsub(/^ +/, '')
end
# change ends here
end