diff --git a/app/controllers/OrganizationController.scala b/app/controllers/OrganizationController.scala index ac987757fd3..7a7bc8ae31c 100755 --- a/app/controllers/OrganizationController.scala +++ b/app/controllers/OrganizationController.scala @@ -191,12 +191,7 @@ class OrganizationController @Inject()( organization <- organizationDAO .findOne(request.identity._organization) ?~> Messages("organization.notFound") ~> NOT_FOUND userEmail <- userService.emailFor(request.identity) - _ = Mailer ! Send(defaultMails.extendPricingPlanMail(request.identity, userEmail)) - _ = Mailer ! Send( - defaultMails.upgradePricingPlanRequestMail(request.identity, - userEmail, - organization.name, - "Extend WEBKNOSSOS plan by a year")) + _ = Mailer ! Send(defaultMails.extendPricingPlanMail(request.identity, userEmail, organization.name)) } yield Ok } @@ -213,12 +208,7 @@ class OrganizationController @Inject()( } else { defaultMails.upgradePricingPlanToPowerMail _ } - _ = Mailer ! Send(mail(request.identity, userEmail)) - _ = Mailer ! Send( - defaultMails.upgradePricingPlanRequestMail(request.identity, - userEmail, - organization.name, - s"Upgrade WEBKNOSSOS Plan to $requestedPlan")) + _ = Mailer ! Send(mail(request.identity, userEmail, organization.name)) } yield Ok } @@ -228,12 +218,8 @@ class OrganizationController @Inject()( _ <- bool2Fox(request.identity.isAdmin) ?~> Messages("organization.pricingUpgrades.notAuthorized") organization <- organizationDAO.findOne(request.identity._organization) ?~> Messages("organization.notFound") ~> NOT_FOUND userEmail <- userService.emailFor(request.identity) - _ = Mailer ! Send(defaultMails.upgradePricingPlanUsersMail(request.identity, userEmail, requestedUsers)) _ = Mailer ! Send( - defaultMails.upgradePricingPlanRequestMail(request.identity, - userEmail, - organization.name, - s"Purchase $requestedUsers additional users")) + defaultMails.upgradePricingPlanUsersMail(request.identity, userEmail, requestedUsers, organization.name)) } yield Ok } @@ -243,12 +229,8 @@ class OrganizationController @Inject()( _ <- bool2Fox(request.identity.isAdmin) ?~> Messages("organization.pricingUpgrades.notAuthorized") organization <- organizationDAO.findOne(request.identity._organization) ?~> Messages("organization.notFound") ~> NOT_FOUND userEmail <- userService.emailFor(request.identity) - _ = Mailer ! Send(defaultMails.upgradePricingPlanStorageMail(request.identity, userEmail, requestedStorage)) _ = Mailer ! Send( - defaultMails.upgradePricingPlanRequestMail(request.identity, - userEmail, - organization.name, - s"Purchase $requestedStorage TB additional storage")) + defaultMails.upgradePricingPlanStorageMail(request.identity, userEmail, requestedStorage, organization.name)) } yield Ok } diff --git a/app/mail/DefaultMails.scala b/app/mail/DefaultMails.scala index 59276c8936f..2ff6c01a578 100755 --- a/app/mail/DefaultMails.scala +++ b/app/mail/DefaultMails.scala @@ -13,6 +13,7 @@ class DefaultMails @Inject()(conf: WkConf) { private val uri = conf.Http.uri private val defaultSender = conf.Mail.defaultSender + private val supportEmail = conf.Mail.supportEmail private val newOrganizationMailingList = conf.WebKnossos.newOrganizationMailingList private val additionalFooter = conf.Mail.additionalFooter @@ -98,59 +99,63 @@ class DefaultMails @Inject()(conf: WkConf) { from = defaultSender, subject = "Help requested // Feedback provided", bodyHtml = html.mail.help(user.name, organizationName, message, currentUrl, additionalFooter).body, - recipients = List("hello@webknossos.org", userEmail) + recipients = List(supportEmail), + ccRecipients = List(userEmail), + replyTo = List(supportEmail, userEmail) ) - def extendPricingPlanMail(user: User, userEmail: String): Mail = + def extendPricingPlanMail(user: User, userEmail: String, organizationName: String): Mail = Mail( from = defaultSender, - subject = "WEBKNOSSOS Plan Extension Request", - bodyHtml = html.mail.extendPricingPlan(user.name, additionalFooter).body, - recipients = List(userEmail) + subject = "WEBKNOSSOS Plan Extension", + bodyHtml = html.mail.extendPricingPlan(user.name, additionalFooter, organizationName).body, + recipients = List(userEmail), + ccRecipients = List(supportEmail), + replyTo = List(userEmail, supportEmail) ) - def upgradePricingPlanToTeamMail(user: User, userEmail: String): Mail = + def upgradePricingPlanToTeamMail(user: User, userEmail: String, organizationName: String): Mail = Mail( from = defaultSender, - subject = "WEBKNOSSOS Plan Upgrade Request", - bodyHtml = html.mail.upgradePricingPlanToTeam(user.name, additionalFooter).body, - recipients = List(userEmail) + subject = "WEBKNOSSOS Upgrade: Team Plan", + bodyHtml = html.mail.upgradePricingPlanToTeam(user.name, additionalFooter, organizationName).body, + recipients = List(userEmail), + ccRecipients = List(supportEmail), + replyTo = List(userEmail, supportEmail) ) - def upgradePricingPlanToPowerMail(user: User, userEmail: String): Mail = + def upgradePricingPlanToPowerMail(user: User, userEmail: String, organizationName: String): Mail = Mail( from = defaultSender, - subject = "WEBKNOSSOS Plan Upgrade Request", - bodyHtml = html.mail.upgradePricingPlanToPower(user.name, additionalFooter).body, - recipients = List(userEmail) + subject = "WEBKNOSSOS Upgrade: Power Plan", + bodyHtml = html.mail.upgradePricingPlanToPower(user.name, additionalFooter, organizationName).body, + recipients = List(userEmail), + ccRecipients = List(supportEmail), + replyTo = List(userEmail, supportEmail) ) - def upgradePricingPlanUsersMail(user: User, userEmail: String, requestedUsers: Int): Mail = + def upgradePricingPlanUsersMail(user: User, userEmail: String, requestedUsers: Int, organizationName: String): Mail = Mail( from = defaultSender, - subject = "Request to upgrade WEBKNOSSOS users", - bodyHtml = html.mail.upgradePricingPlanUsers(user.name, requestedUsers, additionalFooter).body, - recipients = List(userEmail) - ) - - def upgradePricingPlanStorageMail(user: User, userEmail: String, requestedStorage: Int): Mail = - Mail( - from = defaultSender, - subject = "Request to upgrade WEBKNOSSOS storage", - bodyHtml = html.mail.upgradePricingPlanStorage(user.name, requestedStorage, additionalFooter).body, - recipients = List(userEmail) + subject = "WEBKNOSSOS Upgrade: Additional Users", + bodyHtml = html.mail.upgradePricingPlanUsers(user.name, requestedUsers, additionalFooter, organizationName).body, + recipients = List(userEmail), + ccRecipients = List(supportEmail), + replyTo = List(userEmail, supportEmail) ) - def upgradePricingPlanRequestMail(user: User, + def upgradePricingPlanStorageMail(user: User, userEmail: String, - organizationName: String, - messageBody: String): Mail = + requestedStorage: Int, + organizationName: String): Mail = Mail( from = defaultSender, - subject = "Request to upgrade WEBKNOSSOS plan", + subject = "WEBKNOSSOS Upgrade: Additional Storage", bodyHtml = - html.mail.upgradePricingPlanRequest(user.name, userEmail, organizationName, messageBody, additionalFooter).body, - recipients = List("hello@webknossos.org") + html.mail.upgradePricingPlanStorage(user.name, requestedStorage, additionalFooter, organizationName).body, + recipients = List(userEmail), + ccRecipients = List(supportEmail), + replyTo = List(userEmail, supportEmail) ) def jobSuccessfulGenericMail(user: User, diff --git a/app/mail/Mail.scala b/app/mail/Mail.scala index 825e338151b..df11d98f7e5 100644 --- a/app/mail/Mail.scala +++ b/app/mail/Mail.scala @@ -8,6 +8,6 @@ case class Mail(from: String = "", ccRecipients: List[String] = List(), bccRecipients: List[String] = List(), contentType: Option[String] = None, - replyTo: Option[String] = None, + replyTo: List[String] = List(), charset: String = "utf-8", headers: Map[String, String] = Map[String, String]()) diff --git a/app/utils/WkConf.scala b/app/utils/WkConf.scala index d728322079c..61ee4b41173 100644 --- a/app/utils/WkConf.scala +++ b/app/utils/WkConf.scala @@ -168,6 +168,7 @@ class WkConf @Inject()(configuration: Configuration, certificateValidationServic val pass: String = get[String]("mail.smtp.pass") } + val supportEmail: String = get[String]("mail.supportEmail") val defaultSender: String = get[String]("mail.defaultSender") def additionalFooter: String = get[String]("mail.additionalFooter") diff --git a/app/views/mail/extendPricingPlan.scala.html b/app/views/mail/extendPricingPlan.scala.html index 5976d2802e5..47b468e2fdc 100644 --- a/app/views/mail/extendPricingPlan.scala.html +++ b/app/views/mail/extendPricingPlan.scala.html @@ -1,9 +1,8 @@ -@( name: String, additionalFooter: String ) +@(name: String, additionalFooter: String, organizationName: String) @emailBaseTemplate(additionalFooter) {

Hi @{name}

-

Thank you for requesting to extend your current WEBKNOSSOS plan. Our sales team will be in contact with - you shortly with a formal offer.

- +

Thank you for your interest in extending your WEBKNOSSOS plan. Our sales team will contact you shortly.

+

Organization: @organizationName

With best regards,
the WEBKNOSSOS team

} diff --git a/app/views/mail/upgradePricingPlanRequest.scala.html b/app/views/mail/upgradePricingPlanRequest.scala.html deleted file mode 100644 index 5b321837289..00000000000 --- a/app/views/mail/upgradePricingPlanRequest.scala.html +++ /dev/null @@ -1,11 +0,0 @@ -@(name: String, email: String, organizationName: String, messageBody: String, additionalFooter: String) - -@emailBaseTemplate(additionalFooter) { -

Hi WEBKNOSSOS sales team

-

There is a new request to upgrade a WEBKNOSSOS organization with additional plan/features.

-

User: @{name} (@{email})

-

Organization: @{organizationName}

-

Request: @{messageBody}

- -

With best regards,
WEBKNOSSOS

-} diff --git a/app/views/mail/upgradePricingPlanStorage.scala.html b/app/views/mail/upgradePricingPlanStorage.scala.html index 32ae863fe94..164ac1dc5ea 100644 --- a/app/views/mail/upgradePricingPlanStorage.scala.html +++ b/app/views/mail/upgradePricingPlanStorage.scala.html @@ -1,10 +1,9 @@ -@(name: String, requestedStorage: Int, additionalFooter: String) +@(name: String, requestedStorage: Int, additionalFooter: String, organizationName: String) @emailBaseTemplate(additionalFooter) {

Hi @{name}

-

Thank you for requesting to upgrade your WEBKNOSSOS plan with more storage. Our sales team will be in contact with you shortly with a formal offer.

- +

Thank you for interest in adding more storage to your WEBKNOSSOS plan. Our sales team will contact you shortly.

Requested additional storage: @{requestedStorage}TB

- +

Organization: @organizationName

With best regards,
the WEBKNOSSOS team

} diff --git a/app/views/mail/upgradePricingPlanToPower.scala.html b/app/views/mail/upgradePricingPlanToPower.scala.html index 03c7504aca0..9bd0ef3313c 100644 --- a/app/views/mail/upgradePricingPlanToPower.scala.html +++ b/app/views/mail/upgradePricingPlanToPower.scala.html @@ -1,10 +1,8 @@ -@( name: String, additionalFooter: String) +@( name: String, additionalFooter: String, organizationName: String) @emailBaseTemplate(additionalFooter) {

Hi @{name}

-

Thank you for requesting an upgrade to a WEBKNOSSOS Power plan. Our sales team will be in contact with - you shortly with a formal offer.

- - +

Thank you for your interest in the WEBKNOSSOS Power plan. To discuss your specific needs, our sales team will contact you shortly.

+

Organization: @organizationName

With best regards,
the WEBKNOSSOS team

} diff --git a/app/views/mail/upgradePricingPlanToTeam.scala.html b/app/views/mail/upgradePricingPlanToTeam.scala.html index 97547049856..ee73859440d 100644 --- a/app/views/mail/upgradePricingPlanToTeam.scala.html +++ b/app/views/mail/upgradePricingPlanToTeam.scala.html @@ -1,11 +1,8 @@ -@( name: String, additionalFooter: String ) +@(name: String, additionalFooter: String, organizationName: String) @emailBaseTemplate(additionalFooter) {

Hi @{name}

-

Thank you for requesting an upgrade to a WEBKNOSSOS Team plan. Our sales team will be in contact with - you shortly with a formal offer.

- - - +

Thank you for your interest in the WEBKNOSSOS Team plan. To discuss your specific needs, our sales team will contact you shortly.

+

Organization: @organizationName

With best regards,
the WEBKNOSSOS team

} diff --git a/app/views/mail/upgradePricingPlanUsers.scala.html b/app/views/mail/upgradePricingPlanUsers.scala.html index a67c1866175..141ddfc5ab5 100644 --- a/app/views/mail/upgradePricingPlanUsers.scala.html +++ b/app/views/mail/upgradePricingPlanUsers.scala.html @@ -1,11 +1,9 @@ -@( name: String, requestedUsers: Int, additionalFooter: String) +@(name: String, requestedUsers: Int, additionalFooter: String, organizationName: String) @emailBaseTemplate(additionalFooter) {

Hi @{name}

-

Thank you for requesting to upgrade your WEBKNOSSOS plan with more users. Our sales team will be in contact with - you shortly with a formal offer.

- +

Thank you for interest in adding more users to your WEBKNOSSOS plan. Our sales team will contact you shortly.

Requested additional users: @{requestedUsers}

- +

Organization: @organizationName

With best regards,
the WEBKNOSSOS team

} diff --git a/conf/application.conf b/conf/application.conf index f62ca861b1b..cf4e24bb6fd 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -242,6 +242,7 @@ mail { pass = "" } defaultSender = "WEBKNOSSOS " + supportEmail = "Support " additionalFooter = "" # Additional line added to the email footer. HTML can be used here, won’t be escaped but inserted directly. mailchimp { host = "" diff --git a/frontend/javascripts/admin/organization/pricing_plan_utils.ts b/frontend/javascripts/admin/organization/pricing_plan_utils.ts index ccbb0c063ea..530a124586c 100644 --- a/frontend/javascripts/admin/organization/pricing_plan_utils.ts +++ b/frontend/javascripts/admin/organization/pricing_plan_utils.ts @@ -19,7 +19,7 @@ export const teamPlanFeatures = [ "Everything from Basic plan", ]; export const powerPlanFeatures = [ - "Unlimited Users", + "Up to Unlimited Users", "Segmentation Proof-Reading Tool", "On-premise or dedicated hosting solutions available", "Integration with your HPC and storage servers",