diff --git a/app/helpers/user_notifications_helper.rb b/app/helpers/user_notifications_helper.rb
index 4f4ca687a..4c088836d 100644
--- a/app/helpers/user_notifications_helper.rb
+++ b/app/helpers/user_notifications_helper.rb
@@ -51,7 +51,7 @@ module UserNotificationsHelper
def email_excerpt(html, posts_count)
# only include 1st paragraph when more than 1 posts
html = first_paragraph_from(html).to_s if posts_count > 1
- raw format_for_email(html)
+ PrettyText.format_for_email(html).html_safe
end
def normalize_name(name)
@@ -65,8 +65,9 @@ module UserNotificationsHelper
normalize_name(post.user.name) != normalize_name(post.user.username)
end
- def format_for_email(html)
- PrettyText.format_for_email(html).html_safe
+ def format_for_email(post, use_excerpt)
+ html = use_excerpt ? post.excerpt : post.cooked
+ PrettyText.format_for_email(html, post).html_safe
end
end
diff --git a/app/serializers/group_post_serializer.rb b/app/serializers/group_post_serializer.rb
index ad4806d87..77f1eb95b 100644
--- a/app/serializers/group_post_serializer.rb
+++ b/app/serializers/group_post_serializer.rb
@@ -31,6 +31,12 @@ class GroupPostSerializer < ApplicationSerializer
object.topic
end
+ def cooked
+ fragment = Nokogiri::HTML.fragment(object.cooked)
+ DiscourseEvent.trigger(:reduce_cooked, fragment, object)
+ fragment.to_html
+ end
+
def category
object.topic.category
end
diff --git a/app/views/email/_post.html.erb b/app/views/email/_post.html.erb
index 250d1e6d7..42bb7afb8 100644
--- a/app/views/email/_post.html.erb
+++ b/app/views/email/_post.html.erb
@@ -23,7 +23,7 @@
- <%= format_for_email(use_excerpt ? post.excerpt : post.cooked) %> |
+ <%= format_for_email(post, use_excerpt) %> |
diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb
index cfd9b53c2..a627ac13f 100644
--- a/lib/pretty_text.rb
+++ b/lib/pretty_text.rb
@@ -390,8 +390,9 @@ module PrettyText
doc.css(".lightbox-wrapper .meta").remove
end
- def self.format_for_email(html)
+ def self.format_for_email(html, post = nil)
doc = Nokogiri::HTML.fragment(html)
+ DiscourseEvent.trigger(:reduce_cooked, doc, post)
make_all_links_absolute(doc)
strip_image_wrapping(doc)
doc.to_html
diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb
index ce251f91a..82d271b7a 100644
--- a/plugins/poll/plugin.rb
+++ b/plugins/poll/plugin.rb
@@ -22,19 +22,6 @@ DEFAULT_POLL_NAME ||= "poll".freeze
after_initialize do
- # turn polls into a link in emails
- Email::Styles.register_plugin_style do |fragment, opts|
- post = Post.find_by(id: opts[:post_id]) rescue nil
- if post.nil? || post.trashed?
- fragment.css(".poll").each(&:remove)
- else
- post_url = "#{Discourse.base_url}#{post.url}"
- fragment.css(".poll").each do |poll|
- poll.replace "#{I18n.t("poll.email.link_to_poll")}
"
- end
- end
- end
-
module ::DiscoursePoll
class Engine < ::Rails::Engine
engine_name PLUGIN_NAME
@@ -281,7 +268,7 @@ after_initialize do
self.errors.add(:base, I18n.t("poll.default_poll_with_multiple_choices_has_invalid_parameters")) :
self.errors.add(:base, I18n.t("poll.named_poll_with_multiple_choices_has_invalid_parameters", name: poll["name"]))
return
- end
+ end
end
# store the valid poll
@@ -367,6 +354,17 @@ after_initialize do
user ? [POLLS_CUSTOM_FIELD, VOTES_CUSTOM_FIELD] : [POLLS_CUSTOM_FIELD]
end
+ on(:reduce_cooked) do |fragment, post|
+ if post.nil? || post.trashed?
+ fragment.css(".poll, [data-poll-name]").each(&:remove)
+ else
+ post_url = "#{Discourse.base_url}#{post.url}"
+ fragment.css(".poll, [data-poll-name]").each do |poll|
+ poll.replace "#{I18n.t("poll.email.link_to_poll")}
"
+ end
+ end
+ end
+
# tells the front-end we have a poll for that post
on(:post_created) do |post|
next if post.is_first_post? || post.custom_fields[POLLS_CUSTOM_FIELD].blank?