mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
doc blocks for entity mailers
This commit is contained in:
parent
4c7a7e4c05
commit
2db527efe0
@ -19,44 +19,47 @@ use App\Utils\HtmlEngine;
|
|||||||
use App\Models\ClientContact;
|
use App\Models\ClientContact;
|
||||||
use App\Models\VendorContact;
|
use App\Models\VendorContact;
|
||||||
use App\Utils\VendorHtmlEngine;
|
use App\Utils\VendorHtmlEngine;
|
||||||
|
use App\Jobs\Entity\CreateRawPdf;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\URL;
|
||||||
use App\Services\Email\MailMailable;
|
use App\Services\Email\MailMailable;
|
||||||
use Illuminate\Mail\Mailables\Address;
|
use Illuminate\Mail\Mailables\Address;
|
||||||
use Illuminate\Contracts\Mail\Mailable;
|
use Illuminate\Contracts\Mail\Mailable;
|
||||||
use App\DataMapper\EmailTemplateDefaults;
|
use App\DataMapper\EmailTemplateDefaults;
|
||||||
use League\CommonMark\CommonMarkConverter;
|
use League\CommonMark\CommonMarkConverter;
|
||||||
|
use App\Jobs\Vendor\CreatePurchaseOrderPdf;
|
||||||
|
|
||||||
class MailBuild
|
class MailBuild
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/** @var mixed $settings */
|
||||||
* settings
|
|
||||||
*
|
|
||||||
* @var mixed
|
|
||||||
*/
|
|
||||||
protected $settings;
|
protected $settings;
|
||||||
|
|
||||||
/** @var mixed $template */
|
/** @var string $template */
|
||||||
private string $template;
|
private string $template;
|
||||||
|
|
||||||
/** @var mixed $locale */
|
/** @var string $locale */
|
||||||
private string $locale;
|
private string $locale;
|
||||||
|
|
||||||
/** @var mixed $client */
|
/** @var ?Client $client */
|
||||||
private ?Client $client;
|
private ?Client $client;
|
||||||
|
|
||||||
/** @var mixed $vendor */
|
/** @var ?Vendor $vendor */
|
||||||
private ?Vendor $vendor;
|
private ?Vendor $vendor;
|
||||||
|
|
||||||
/** @var mixed $html_engine */
|
/** @var mixed $html_engine */
|
||||||
private mixed $html_engine;
|
private mixed $html_engine;
|
||||||
|
|
||||||
/** @var mixed $variables */
|
/** @var array $variables */
|
||||||
private array $variables = [];
|
private array $variables = [];
|
||||||
|
|
||||||
|
/** @var int $max_attachment_size */
|
||||||
|
public int $max_attachment_size = 3000000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __construct
|
* __construct
|
||||||
*
|
*
|
||||||
* @param mixed $mail_entity
|
* @param MailEntity $mail_entity
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function __construct(public MailEntity $mail_entity){}
|
public function __construct(public MailEntity $mail_entity){}
|
||||||
@ -92,7 +95,7 @@ class MailBuild
|
|||||||
*/
|
*/
|
||||||
public function getMailable(): Mailable
|
public function getMailable(): Mailable
|
||||||
{
|
{
|
||||||
return new MailMailable($this->mail_entity->mail_object); //todo current depends on EmailObject
|
return new MailMailable($this->mail_entity->mail_object);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -114,28 +117,6 @@ class MailBuild
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the meta data for the Email object
|
|
||||||
*
|
|
||||||
* @return self
|
|
||||||
*/
|
|
||||||
private function setMetaData(): self
|
|
||||||
{
|
|
||||||
|
|
||||||
$this->mail_entity->mail_object->company_key = $this->mail_entity->company->company_key;
|
|
||||||
|
|
||||||
$this->mail_entity->mail_object->logo = $this->mail_entity->company->present()->logo();
|
|
||||||
|
|
||||||
$this->mail_entity->mail_object->signature = $this->mail_entity->mail_object->signature ?: $this->settings->email_signature;
|
|
||||||
|
|
||||||
$this->mail_entity->mail_object->whitelabel = $this->mail_entity->company->account->isPaid() ? true : false;
|
|
||||||
|
|
||||||
$this->mail_entity->mail_object->company = $this->mail_entity->company;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the locale
|
* Sets the locale
|
||||||
* Sets the settings object depending on context
|
* Sets the settings object depending on context
|
||||||
@ -166,13 +147,14 @@ class MailBuild
|
|||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
||||||
$this->locale = $this->mail_entity->company->locale();
|
$this->locale = $this->mail_entity->company->locale();
|
||||||
$this->settings = $this->mail_entity->company->settings;
|
$this->settings = $this->mail_entity->company->settings;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->mail_entity->mail_object->settings = $this->settings;
|
$this->mail_entity->mail_object->settings = $this->settings;
|
||||||
|
|
||||||
|
|
||||||
App::setLocale($this->locale);
|
App::setLocale($this->locale);
|
||||||
App::forgetInstance('translator');
|
App::forgetInstance('translator');
|
||||||
$t = app('translator');
|
$t = app('translator');
|
||||||
@ -181,6 +163,28 @@ class MailBuild
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the meta data for the Email object
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
private function setMetaData(): self
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->mail_entity->mail_object->company_key = $this->mail_entity->company->company_key;
|
||||||
|
|
||||||
|
$this->mail_entity->mail_object->logo = $this->mail_entity->company->present()->logo();
|
||||||
|
|
||||||
|
$this->mail_entity->mail_object->signature = $this->mail_entity->mail_object->signature ?: $this->settings->email_signature;
|
||||||
|
|
||||||
|
$this->mail_entity->mail_object->whitelabel = $this->mail_entity->company->account->isPaid() ? true : false;
|
||||||
|
|
||||||
|
$this->mail_entity->mail_object->company = $this->mail_entity->company;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the template
|
* Sets the template
|
||||||
*
|
*
|
||||||
@ -209,8 +213,12 @@ class MailBuild
|
|||||||
*/
|
*/
|
||||||
private function setTo(): self
|
private function setTo(): self
|
||||||
{
|
{
|
||||||
$this->mail_entity->mail_object->to = [new Address($this->mail_entity->invitation->contact->email, $this->mail_entity->invitation->contact->present()->name())];
|
|
||||||
|
$this->mail_entity->mail_object->to = array_merge(
|
||||||
|
$this->mail_entity->mail_object->to ,
|
||||||
|
[new Address($this->mail_entity->invitation->contact->email, $this->mail_entity->invitation->contact->present()->name())]
|
||||||
|
);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,24 +301,95 @@ class MailBuild
|
|||||||
*/
|
*/
|
||||||
private function setAttachments(): self
|
private function setAttachments(): self
|
||||||
{
|
{
|
||||||
$attachments = [];
|
$this->setContextAttachments();
|
||||||
|
|
||||||
if ($this->settings->document_email_attachment && $this->mail_entity->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) {
|
if ($this->settings->document_email_attachment && $this->mail_entity->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) {
|
||||||
|
|
||||||
foreach ($this->mail_entity->company->documents as $document) {
|
foreach ($this->mail_entity->company->documents as $document) {
|
||||||
|
|
||||||
$attachments[] = ['file' => base64_encode($document->getFile()), 'name' => $document->name];
|
$this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['file' => base64_encode($document->getFile()), 'name' => $document->name]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, $attachments);
|
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Depending on context we may need to resolve the
|
||||||
|
* attachment dependencies.
|
||||||
|
*
|
||||||
|
* ie. Resolve the entity.
|
||||||
|
* ie. Resolve if we should attach the Entity PDF
|
||||||
|
* ie. Create the Entity PDF
|
||||||
|
* ie. Inject the PDF
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function setContextAttachments(): self
|
||||||
|
{
|
||||||
|
|
||||||
|
if(!$this->settings->pdf_email_attachment || !$this->mail_entity->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT))
|
||||||
|
return [];
|
||||||
|
|
||||||
|
if($this->mail_entity->invitation?->purchase_order){
|
||||||
|
|
||||||
|
$pdf = (new CreatePurchaseOrderPdf($this->mail_entity->invitation))->rawPdf();
|
||||||
|
|
||||||
|
$this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['file' => base64_encode($pdf), 'name' => $this->mail_entity->invitation->purchase_order->numberFormatter().'.pdf']);
|
||||||
|
|
||||||
|
if ($this->vendor->getSetting('document_email_attachment') !== false && $this->mail_entity->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) {
|
||||||
|
|
||||||
|
// Storage::url
|
||||||
|
foreach ($this->mail_entity->invitation->purchase_order->documents as $document) {
|
||||||
|
|
||||||
|
if($document->size > $this->max_attachment_size)
|
||||||
|
$this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, ["<a class='doc_links' href='" . URL::signedRoute('documents.public_download', ['document_hash' => $document->hash]) ."'>". $document->name ."</a>"]);
|
||||||
|
else
|
||||||
|
$this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->mail_entity->invitation?->invoice)
|
||||||
|
$entity = 'invoice';
|
||||||
|
|
||||||
|
if($this->mail_entity->invitation?->quote)
|
||||||
|
$entity = 'quote';
|
||||||
|
|
||||||
|
if($this->mail_entity->invitation?->credit)
|
||||||
|
$entity = 'credit';
|
||||||
|
|
||||||
|
$pdf = ((new CreateRawPdf($this->mail_entity->invitation, $this->mail_entity->invitation->company->db))->handle());
|
||||||
|
|
||||||
|
$this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['file' => base64_encode($pdf), 'name' => $this->mail_entity->invitation->{$entity}->numberFormatter().'.pdf']);
|
||||||
|
|
||||||
|
if ($this->client->getSetting('document_email_attachment') !== false && $this->mail_entity->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) {
|
||||||
|
|
||||||
|
// Storage::url
|
||||||
|
foreach ($this->mail_entity->invitation->{$entity}->documents as $document) {
|
||||||
|
|
||||||
|
if($document->size > $this->max_attachment_size)
|
||||||
|
$this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, ["<a class='doc_links' href='" . URL::signedRoute('documents.public_download', ['document_hash' => $document->hash]) ."'>". $document->name ."</a>"]);
|
||||||
|
else
|
||||||
|
$this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->settings->pdf_email_attachment && $entity == 'invoice')
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -338,7 +417,6 @@ class MailBuild
|
|||||||
*/
|
*/
|
||||||
public function setVariables(): self
|
public function setVariables(): self
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if($this->mail_entity->mail_object->variables){
|
if($this->mail_entity->mail_object->variables){
|
||||||
$this->mail_entity->mail_object->subject = strtr($this->mail_entity->mail_object->subject, $this->mail_entity->mail_object->variables);
|
$this->mail_entity->mail_object->subject = strtr($this->mail_entity->mail_object->subject, $this->mail_entity->mail_object->variables);
|
||||||
@ -352,6 +430,7 @@ class MailBuild
|
|||||||
$this->mail_entity->mail_object->body = $this->parseMarkdownToHtml($this->mail_entity->mail_object->body);
|
$this->mail_entity->mail_object->body = $this->parseMarkdownToHtml($this->mail_entity->mail_object->body);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,6 +38,8 @@ class MailObject
|
|||||||
|
|
||||||
public array $attachments = [];
|
public array $attachments = [];
|
||||||
|
|
||||||
|
public array $attachment_links = [];
|
||||||
|
|
||||||
public string $company_key;
|
public string $company_key;
|
||||||
|
|
||||||
public ?object $settings = null;
|
public ?object $settings = null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user