1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-14 15:13:29 +01:00
invoiceninja/app/Ninja/Mailers/UserMailer.php

221 lines
6.5 KiB
PHP
Raw Normal View History

2017-01-30 20:40:43 +01:00
<?php
namespace App\Ninja\Mailers;
2015-03-16 22:45:25 +01:00
2015-10-11 16:41:09 +02:00
use App\Models\Invitation;
2015-03-31 20:50:58 +02:00
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\User;
2015-03-16 22:45:25 +01:00
class UserMailer extends Mailer
{
/**
2017-01-30 20:40:43 +01:00
* @param User $user
* @param User|null $invitor
*/
2015-03-16 22:45:25 +01:00
public function sendConfirmation(User $user, User $invitor = null)
{
2017-01-30 20:40:43 +01:00
if (! $user->email) {
2015-03-16 22:45:25 +01:00
return;
}
$view = 'confirm';
$subject = trans('texts.confirmation_subject');
$data = [
'user' => $user,
'invitationMessage' => $invitor ? trans('texts.invitation_message', ['invitor' => $invitor->getDisplayName()]) : '',
];
if ($invitor) {
$fromEmail = $invitor->email;
$fromName = $invitor->getDisplayName();
} else {
$fromEmail = CONTACT_EMAIL;
$fromName = CONTACT_NAME;
}
$this->sendTo($user->email, $fromEmail, $fromName, $subject, $view, $data);
}
/**
* @param User $user
* @param User|null $invitor
*/
public function sendEmailChanged(User $user)
{
$oldEmail = $user->getOriginal('email');
$newEmail = $user->email;
if (! $oldEmail || ! $newEmail) {
return;
}
$view = 'user_message';
$subject = trans('texts.email_address_changed');
$data = [
'user' => $user,
'userName' => $user->getDisplayName(),
'primaryMessage' => trans('texts.email_address_changed_message', ['old_email' => $oldEmail, 'new_email' => $newEmail]),
];
$this->sendTo($oldEmail, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
}
/**
2017-01-30 20:40:43 +01:00
* @param User $user
* @param Invoice $invoice
* @param $notificationType
* @param Payment|null $payment
*/
public function sendNotification(
User $user,
Invoice $invoice,
$notificationType,
Payment $payment = null,
$notes = false
2017-01-30 17:05:31 +01:00
) {
2018-05-14 19:08:32 +02:00
if (! $user->shouldNotify($invoice)) {
2015-03-16 22:45:25 +01:00
return;
}
2016-06-07 13:39:53 +02:00
$entityType = $invoice->getEntityType();
$view = ($notificationType == 'approved' ? ENTITY_QUOTE : ENTITY_INVOICE) . "_{$notificationType}";
$account = $user->account;
$client = $invoice->client;
2017-03-23 14:55:46 +01:00
$link = $invoice->present()->multiAccountLink;
2015-03-16 22:45:25 +01:00
$data = [
'entityType' => $entityType,
'clientName' => $client->getDisplayName(),
'accountName' => $account->getDisplayName(),
2015-03-16 22:45:25 +01:00
'userName' => $user->getDisplayName(),
'invoiceAmount' => $account->formatMoney($invoice->getRequestedAmount(), $client),
2015-03-16 22:45:25 +01:00
'invoiceNumber' => $invoice->invoice_number,
'invoiceLink' => $link,
2015-12-16 12:49:26 +01:00
'account' => $account,
2015-03-16 22:45:25 +01:00
];
if ($payment) {
2016-04-30 23:54:56 +02:00
$data['payment'] = $payment;
$data['paymentAmount'] = $account->formatMoney($payment->amount, $client);
2015-03-16 22:45:25 +01:00
}
$subject = trans("texts.notification_{$entityType}_{$notificationType}_subject", [
'invoice' => $invoice->invoice_number,
2017-01-30 20:40:43 +01:00
'client' => $client->getDisplayName(),
]);
2016-06-07 13:39:53 +02:00
if ($notes) {
$subject .= ' [' . trans('texts.notes_' . $notes) . ']';
}
2015-03-16 22:45:25 +01:00
$this->sendTo($user->email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
}
2015-10-11 16:41:09 +02:00
/**
* @param Invitation $invitation
*/
2015-10-11 16:41:09 +02:00
public function sendEmailBounced(Invitation $invitation)
{
$user = $invitation->user;
2015-12-16 12:49:26 +01:00
$account = $user->account;
2015-10-11 16:41:09 +02:00
$invoice = $invitation->invoice;
$entityType = $invoice->getEntityType();
2017-01-30 20:40:43 +01:00
if (! $user->email) {
2015-10-11 16:41:09 +02:00
return;
}
$subject = trans("texts.notification_{$entityType}_bounced_subject", ['invoice' => $invoice->invoice_number]);
$view = 'email_bounced';
$data = [
'userName' => $user->getDisplayName(),
'emailError' => $invitation->email_error,
'entityType' => $entityType,
'contactName' => $invitation->contact->getDisplayName(),
'invoiceNumber' => $invoice->invoice_number,
];
2016-06-07 13:39:53 +02:00
2015-10-11 16:41:09 +02:00
$this->sendTo($user->email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
}
2016-08-13 21:19:37 +02:00
2017-03-23 14:55:46 +01:00
/**
* @param Invitation $invitation
*/
2017-07-19 11:59:56 +02:00
public function sendMessage($user, $subject, $message, $data = false)
2017-03-23 14:55:46 +01:00
{
if (! $user->email) {
return;
}
2017-07-19 11:59:56 +02:00
$invoice = $data && isset($data['invoice']) ? $data['invoice'] : false;
2017-03-23 14:55:46 +01:00
$view = 'user_message';
2017-07-19 11:59:56 +02:00
$data = $data ?: [];
$data += [
2017-03-23 14:55:46 +01:00
'userName' => $user->getDisplayName(),
2017-09-03 17:36:40 +02:00
'primaryMessage' => $message,
//'secondaryMessage' => $message,
2017-04-02 15:54:07 +02:00
'invoiceLink' => $invoice ? $invoice->present()->multiAccountLink : false,
2017-03-23 14:55:46 +01:00
];
$this->sendTo($user->email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
}
2016-08-13 21:19:37 +02:00
public function sendSecurityCode($user, $code)
{
2017-01-30 20:40:43 +01:00
if (! $user->email) {
2016-08-13 21:19:37 +02:00
return;
}
$subject = trans('texts.security_code_email_subject');
$view = 'security_code';
$data = [
'userName' => $user->getDisplayName(),
'code' => $code,
];
$this->sendTo($user->email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
}
2017-11-14 21:34:56 +01:00
public function sendPasswordReset($user, $token)
{
if (! $user->email) {
return;
}
$subject = trans('texts.your_password_reset_link');
$view = 'password';
$data = [
'token' => $token,
];
$this->sendTo($user->email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
}
2017-11-23 09:10:14 +01:00
public function sendScheduledReport($scheduledReport, $file)
{
$user = $scheduledReport->user;
$config = json_decode($scheduledReport->config);
if (! $user->email) {
return;
}
$subject = sprintf('%s - %s %s', APP_NAME, trans('texts.' . $config->report_type), trans('texts.report'));
$view = 'user_message';
$data = [
'userName' => $user->getDisplayName(),
'primaryMessage' => trans('texts.scheduled_report_attached', ['type' => trans('texts.' . $config->report_type)]),
'documents' => [[
'name' => $file->filename . '.' . $config->export_format,
'data' => $file->string($config->export_format),
]]
];
$this->sendTo($user->email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data);
}
2015-03-16 22:45:25 +01:00
}