Redmine Plugin Контакты Helpdesk HTML Письма были проанализированы без разрывов строк - PullRequest
1 голос
/ 26 марта 2020

возможно, у кого-то есть похожая проблема с плагином службы поддержки контактов 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
...