91 lines
2.7 KiB
Ruby
91 lines
2.7 KiB
Ruby
# Class which holds feedback sent to the archive administrators about the archive as a whole
|
|
class Feedback < ApplicationRecord
|
|
attr_accessor :ip_address, :referer, :site_skin
|
|
|
|
# NOTE: this has NOTHING to do with the Comment class!
|
|
# This is just the name of the text field in the Feedback
|
|
# class which holds the user's comments.
|
|
validates_presence_of :comment
|
|
validates_presence_of :summary
|
|
validates_presence_of :language
|
|
validates :email, email_format: { allow_blank: false }
|
|
validates_length_of :summary, maximum: ArchiveConfig.FEEDBACK_SUMMARY_MAX,
|
|
too_long: ts("must be less than %{max} characters long.", max: ArchiveConfig.FEEDBACK_SUMMARY_MAX_DISPLAYED)
|
|
|
|
validate :check_for_spam
|
|
def check_for_spam
|
|
approved = logged_in_with_matching_email? || !Akismetor.spam?(akismet_attributes)
|
|
errors.add(:base, ts("This report looks like spam to our system!")) unless approved
|
|
end
|
|
|
|
def logged_in_with_matching_email?
|
|
User.current_user.present? && User.current_user.email == email
|
|
end
|
|
|
|
def akismet_attributes
|
|
# If the user is logged in and we're sending info to Akismet, we can assume
|
|
# the email does not match.
|
|
role = User.current_user.present? ? "user-with-nonmatching-email" : "guest"
|
|
{
|
|
comment_type: "contact-form",
|
|
key: ArchiveConfig.AKISMET_KEY,
|
|
blog: ArchiveConfig.AKISMET_NAME,
|
|
user_ip: ip_address,
|
|
user_agent: user_agent,
|
|
user_role: role,
|
|
comment_author_email: email,
|
|
comment_content: comment
|
|
}
|
|
end
|
|
|
|
def mark_as_spam!
|
|
# don't submit spam reports unless in production mode
|
|
Rails.env.production? && Akismetor.submit_spam(akismet_attributes)
|
|
end
|
|
|
|
def mark_as_ham!
|
|
# don't submit ham reports unless in production mode
|
|
Rails.env.production? && Akismetor.submit_ham(akismet_attributes)
|
|
end
|
|
|
|
def email_and_send
|
|
UserMailer.feedback(id).deliver_later
|
|
send_report
|
|
end
|
|
|
|
def rollout_string
|
|
string = ""
|
|
# ES UPGRADE TRANSITION #
|
|
# Remove ES version logic, but leave this method for future rollout use
|
|
# string << if Feedback.use_new_search?
|
|
# "ES 6.0"
|
|
# else
|
|
# "ES 0.90"
|
|
# end
|
|
end
|
|
|
|
def send_report
|
|
return unless zoho_enabled?
|
|
|
|
reporter = SupportReporter.new(
|
|
title: summary,
|
|
description: comment,
|
|
language: language,
|
|
email: email,
|
|
username: username,
|
|
user_agent: user_agent,
|
|
site_revision: ArchiveConfig.REVISION.to_s,
|
|
rollout: rollout,
|
|
ip_address: ip_address,
|
|
referer: referer,
|
|
site_skin: site_skin
|
|
)
|
|
reporter.send_report!
|
|
end
|
|
|
|
private
|
|
|
|
def zoho_enabled?
|
|
%w[staging production].include?(Rails.env)
|
|
end
|
|
end
|