class CommentMailer < ApplicationMailer # Sends email to an owner of the top-level commentable when a new comment is created # This may be an admin, in which case we use the admin address instead def comment_notification(user, comment) @comment = comment @owner = true email = user.is_a?(Admin) ? ArchiveConfig.ADMIN_ADDRESS : user.email locale = user.try(:preference).try(:locale_for_mails) || I18n.default_locale.to_s I18n.with_locale(locale) do mail( to: email, # i18n-tasks-use t("comment_mailer.comment_notification.subject.chapter") # i18n-tasks-use t("comment_mailer.comment_notification.subject.other") # i18n-tasks-use t("comment_mailer.comment_notification.subject.tag") subject: subject_for_commentable(@comment) ) end end # Sends email to an owner of the top-level commentable when a comment is edited # This may be an admin, in which case we use the admin address instead def edited_comment_notification(user, comment) @comment = comment @owner = true email = user.is_a?(Admin) ? ArchiveConfig.ADMIN_ADDRESS : user.email locale = user.try(:preference).try(:locale_for_mails) || I18n.default_locale.to_s I18n.with_locale(locale) do mail( to: email, # i18n-tasks-use t("comment_mailer.edited_comment_notification.subject.chapter") # i18n-tasks-use t("comment_mailer.edited_comment_notification.subject.other") # i18n-tasks-use t("comment_mailer.edited_comment_notification.subject.tag") subject: subject_for_commentable(@comment) ) end end # Sends email to commenter when a reply is posted to their comment # This may be a non-user of the archive def comment_reply_notification(your_comment, comment) return if your_comment.comment_owner_email.blank? return if your_comment.pseud_id.nil? && AdminBlacklistedEmail.is_blacklisted?(your_comment.comment_owner_email) @your_comment = your_comment @comment = comment mail( to: @your_comment.comment_owner_email, # i18n-tasks-use t("comment_mailer.comment_reply_notification.subject.chapter") # i18n-tasks-use t("comment_mailer.comment_reply_notification.subject.other") # i18n-tasks-use t("comment_mailer.comment_reply_notification.subject.tag") subject: subject_for_commentable(@comment) ) end # Sends email to commenter when a reply to their comment is edited # This may be a non-user of the archive def edited_comment_reply_notification(your_comment, edited_comment) return if your_comment.comment_owner_email.blank? return if your_comment.pseud_id.nil? && AdminBlacklistedEmail.is_blacklisted?(your_comment.comment_owner_email) return if your_comment.is_deleted? @your_comment = your_comment @comment = edited_comment mail( to: @your_comment.comment_owner_email, # i18n-tasks-use t("comment_mailer.edited_comment_reply_notification.subject.chapter") # i18n-tasks-use t("comment_mailer.edited_comment_reply_notification.subject.other") # i18n-tasks-use t("comment_mailer.edited_comment_reply_notification.subject.tag") subject: subject_for_commentable(@comment) ) end # Sends email to the poster of a top-level comment def comment_sent_notification(comment) @comment = comment @noreply = true # don't give reply link to your own comment mail( to: @comment.comment_owner_email, # i18n-tasks-use t("comment_mailer.comment_sent_notification.subject.chapter") # i18n-tasks-use t("comment_mailer.comment_sent_notification.subject.other") # i18n-tasks-use t("comment_mailer.comment_sent_notification.subject.tag") subject: subject_for_commentable(@comment) ) end # Sends email to the poster of a reply to a comment def comment_reply_sent_notification(comment) @comment = comment @parent_comment = comment.commentable @noreply = true mail( to: @comment.comment_owner_email, # i18n-tasks-use t("comment_mailer.comment_reply_sent_notification.subject.chapter") # i18n-tasks-use t("comment_mailer.comment_reply_sent_notification.subject.other") # i18n-tasks-use t("comment_mailer.comment_reply_sent_notification.subject.tag") subject: subject_for_commentable(@comment) ) end private def subject_for_commentable(comment) name = comment.ultimate_parent.commentable_name.gsub(">", ">").gsub("<", "<").html_safe if comment.ultimate_parent.is_a?(Tag) t(".subject.tag", app_name: ArchiveConfig.APP_SHORT_NAME, name: name) elsif comment.parent.is_a?(Chapter) && comment.parent.work.chaptered? t(".subject.chapter", app_name: ArchiveConfig.APP_SHORT_NAME, position: comment.parent.position, title: name) else t(".subject.other", app_name: ArchiveConfig.APP_SHORT_NAME, title: name) end end end