overleaf/services/web/app/coffee/Features/Email/EmailBuilder.coffee

167 lines
6.6 KiB
CoffeeScript
Raw Normal View History

_ = require('underscore')
settings = require("settings-sharelatex")
2018-06-19 08:52:56 -04:00
marked = require('marked')
StringHelper = require "../Helpers/StringHelper"
PersonalEmailLayout = require("./Layouts/PersonalEmailLayout")
NotificationEmailLayout = require("./Layouts/NotificationEmailLayout")
BaseWithHeaderEmailLayout = require("./Layouts/" + settings.brandPrefix + "BaseWithHeaderEmailLayout")
SpamSafe = require("./SpamSafe")
2016-06-28 12:07:27 -04:00
SingleCTAEmailBody = require("./Bodies/" + settings.brandPrefix + "SingleCTAEmailBody")
2016-06-28 12:07:27 -04:00
2018-06-19 08:52:56 -04:00
CTAEmailTemplate = (content) ->
content.greeting ?= () -> 'Hi,'
content.secondaryMessage ?= () -> ""
return {
subject: (opts) -> content.subject(opts),
layout: BaseWithHeaderEmailLayout,
plainTextTemplate: (opts) -> """
#{content.greeting(opts)}
#{content.message(opts).trim()}
#{content.ctaText(opts)}: #{content.ctaURL(opts)}
#{content.secondaryMessage?(opts).trim() or ""}
Regards,
The #{settings.appName} Team - #{settings.siteUrl}
"""
compiledTemplate: (opts) ->
SingleCTAEmailBody({
title: content.title?(opts)
greeting: content.greeting(opts)
message: marked(content.message(opts).trim())
secondaryMessage: marked(content.secondaryMessage(opts).trim())
ctaText: content.ctaText(opts)
ctaURL: content.ctaURL(opts)
gmailGoToAction: content.gmailGoToAction?(opts)
StringHelper: StringHelper
2018-06-19 08:52:56 -04:00
})
}
2016-10-27 09:41:13 -04:00
2018-06-19 08:52:56 -04:00
templates = {}
2014-10-16 07:46:38 -04:00
templates.accountMergeToOverleafAddress = CTAEmailTemplate({
subject: () -> "Confirm Account Merge - #{settings.appName}"
title: () -> "Confirm Account Merge"
message: () ->
"""
2018-09-18 08:50:25 -04:00
To merge your ShareLaTeX and Overleaf accounts, click the button below.
If you think you have received this message in error,
please contact us at https://www.overleaf.com/contact
"""
ctaText: () -> "Confirm Account Merge"
ctaURL: (opts) -> opts.tokenLinkUrl
})
2018-09-13 06:45:31 -04:00
templates.accountMergeToSharelatexAddress = templates.accountMergeToOverleafAddress
2018-06-19 08:52:56 -04:00
templates.registered = CTAEmailTemplate({
subject: () -> "Activate your #{settings.appName} Account"
message: (opts) -> """
Congratulations, you've just had an account created for you on #{settings.appName} with the email address '#{_.escape(opts.to)}'.
2018-06-19 08:52:56 -04:00
Click here to set your password and log in:
"""
2018-06-19 08:52:56 -04:00
secondaryMessage: () -> "If you have any questions or problems, please contact #{settings.adminEmail}"
ctaText: () -> "Set password"
ctaURL: (opts) -> opts.setNewPasswordUrl
})
templates.canceledSubscription = CTAEmailTemplate({
subject: () -> "#{settings.appName} thoughts"
message: () -> """
I'm sorry to see you cancelled your #{settings.appName} premium account. Would you mind giving us some feedback on what the site is lacking at the moment via this quick survey?
2016-10-27 09:41:13 -04:00
"""
2018-06-19 08:52:56 -04:00
secondaryMessage: () -> "Thank you in advance!"
ctaText: () -> "Leave Feedback"
2018-08-23 12:34:13 -04:00
ctaURL: (opts) -> "https://docs.google.com/forms/d/e/1FAIpQLScqU6Je1r4Afz6ul6oY0RAfN7RabdWv_oL1u7Rj1YBmXS4fiQ/viewform?usp=sf_link"
2018-06-19 08:52:56 -04:00
})
templates.reactivatedSubscription = CTAEmailTemplate({
subject: () -> "Subscription Reactivated - #{settings.appName}"
message: (opts) -> """
Your subscription was reactivated successfully.
"""
ctaText: () -> "View Subscription Dashboard"
ctaURL: (opts) -> "#{settings.siteUrl}/user/subscription"
})
2018-06-19 08:52:56 -04:00
templates.passwordResetRequested = CTAEmailTemplate({
subject: () -> "Password Reset - #{settings.appName}"
title: () -> "Password Reset"
message: () -> "We got a request to reset your #{settings.appName} password."
secondaryMessage: () -> """
2016-10-27 09:41:13 -04:00
If you ignore this message, your password won't be changed.
If you didn't request a password reset, let us know.
"""
2018-06-19 08:52:56 -04:00
ctaText: () -> "Reset password"
ctaURL: (opts) -> opts.setNewPasswordUrl
})
templates.confirmEmail = CTAEmailTemplate({
subject: () -> "Confirm Email - #{settings.appName}"
title: () -> "Confirm Email"
message: () -> "Please confirm your email on #{settings.appName}."
ctaText: () -> "Confirm Email"
ctaURL: (opts) -> opts.confirmEmailUrl
})
templates.projectInvite = CTAEmailTemplate({
subject: (opts) -> "#{ _.escape(SpamSafe.safeProjectName(opts.project.name, "New Project")) } - shared by #{ _.escape(SpamSafe.safeEmail(opts.owner.email, "a collaborator")) }"
title: (opts) -> "#{ _.escape(SpamSafe.safeProjectName(opts.project.name, "New Project")) } - shared by #{ _.escape(SpamSafe.safeEmail(opts.owner.email, "a collaborator")) }"
message: (opts) -> "#{ _.escape(SpamSafe.safeEmail(opts.owner.email, "a collaborator")) } wants to share #{ _.escape(SpamSafe.safeProjectName(opts.project.name, "a new project")) } with you."
2018-06-19 08:52:56 -04:00
ctaText: () -> "View project"
ctaURL: (opts) -> opts.inviteUrl
gmailGoToAction: (opts) ->
target: opts.inviteUrl
name: "View project"
description: "Join #{ _.escape(SpamSafe.safeProjectName(opts.project.name, "project")) } at #{ settings.appName }"
2018-06-19 08:52:56 -04:00
})
templates.verifyEmailToJoinTeam = CTAEmailTemplate({
subject: (opts) -> "#{ _.escape(SpamSafe.safeUserName(opts.inviterName, "A collaborator")) } has invited you to join a team on #{ settings.appName }"
title: (opts) -> "#{ _.escape(SpamSafe.safeUserName(opts.inviterName, "A collaborator")) } has invited you to join a team on #{ settings.appName }"
2018-06-19 08:52:56 -04:00
message: (opts) -> "Please click the button below to join the team and enjoy the benefits of an upgraded #{ settings.appName } account."
ctaText: (opts) -> "Join now"
ctaURL: (opts) -> opts.acceptInviteUrl
})
templates.dropboxUnlinkedDuplicate = CTAEmailTemplate({
subject: () -> "Your Dropbox Account has been Unlinked - #{settings.appName}"
message: (opts) -> """
Our automated systems have detected that your Dropbox account was linked to more than one Overleaf accounts. This should not have been allowed and might be causing issues with the Dropbox sync feature.
We have now unlinked all your Dropbox and Overleaf Accounts. To ensure your project will keep syncing you can link your Dropbox account to the Overleaf account of your choice now.
"""
ctaText: () -> "Link Dropbox Account"
ctaURL: (opts) -> "#{settings.siteUrl}/user/settings"
})
2018-06-19 08:52:56 -04:00
templates.testEmail = CTAEmailTemplate({
subject: () -> "A Test Email from #{settings.appName}"
title: () -> "A Test Email from #{settings.appName}"
greeting: () -> "Hi,"
message: () -> "This is a test Email from #{settings.appName}"
ctaText: () -> "Open #{settings.appName}"
ctaURL: () -> settings.siteUrl
})
2017-01-17 05:52:04 -05:00
module.exports =
templates: templates
2018-06-19 08:52:56 -04:00
CTAEmailTemplate: CTAEmailTemplate
buildEmail: (templateName, opts)->
template = templates[templateName]
2014-06-17 11:28:52 -04:00
opts.siteUrl = settings.siteUrl
opts.body = template.compiledTemplate(opts)
2016-06-28 12:07:27 -04:00
if settings.email?.templates?.customFooter?
opts.body += settings.email?.templates?.customFooter
return {
subject : template.subject(opts)
html: template.layout(opts)
text: template?.plainTextTemplate?(opts)
2017-01-17 05:52:04 -05:00
}