2020-03-26 04:23:57 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Invoice Ninja (https://invoiceninja.com)
|
|
|
|
*
|
|
|
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
|
|
|
*
|
|
|
|
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
|
|
|
|
*
|
|
|
|
* @license https://opensource.org/licenses/AAL
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace App\Utils;
|
|
|
|
|
|
|
|
use App\DataMapper\EmailTemplateDefaults;
|
|
|
|
use App\Utils\Traits\MakesHash;
|
|
|
|
use App\Utils\Traits\MakesInvoiceHtml;
|
|
|
|
use App\Utils\Traits\MakesTemplateData;
|
|
|
|
use League\CommonMark\CommonMarkConverter;
|
|
|
|
|
|
|
|
class TemplateEngine
|
|
|
|
{
|
|
|
|
use MakesHash;
|
|
|
|
use MakesTemplateData;
|
|
|
|
use MakesInvoiceHtml;
|
|
|
|
|
|
|
|
public $body;
|
|
|
|
|
|
|
|
public $subject;
|
|
|
|
|
|
|
|
public $entity;
|
|
|
|
|
|
|
|
public $entity_id;
|
|
|
|
|
|
|
|
public $template;
|
|
|
|
|
|
|
|
private $entity_obj;
|
|
|
|
|
|
|
|
private $settings_entity;
|
|
|
|
|
2020-03-26 09:25:44 +01:00
|
|
|
public function __construct($body, $subject, $entity, $entity_id, $template)
|
2020-03-26 04:23:57 +01:00
|
|
|
{
|
|
|
|
$this->body = $body;
|
|
|
|
|
|
|
|
$this->subject = $subject;
|
|
|
|
|
|
|
|
$this->entity = $entity;
|
|
|
|
|
|
|
|
$this->entity_id = $entity_id;
|
|
|
|
|
|
|
|
$this->template = $template;
|
|
|
|
|
|
|
|
$this->entity_obj = null;
|
|
|
|
|
|
|
|
$this->settings_entity = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function build()
|
|
|
|
{
|
|
|
|
return $this->setEntity()
|
|
|
|
->setSettingsObject()
|
|
|
|
->setTemplates()
|
|
|
|
->replaceValues()
|
|
|
|
->renderTemplate();
|
|
|
|
}
|
|
|
|
|
|
|
|
private function setEntity()
|
|
|
|
{
|
2020-03-26 09:25:44 +01:00
|
|
|
if (strlen($this->entity) > 1 && strlen($this->entity_id) >1) {
|
2020-03-26 04:23:57 +01:00
|
|
|
$class = 'App\Models\\'.ucfirst($this->entity);
|
|
|
|
$this->entity_obj = $class::whereId($this->decodePrimaryKey($this->entity_id))->company()->first();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function setSettingsObject()
|
|
|
|
{
|
|
|
|
if ($this->entity_obj) {
|
|
|
|
$this->settings_entity = $this->entity_obj->client;
|
|
|
|
} else {
|
|
|
|
$this->settings_entity = auth()->user()->company();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If the body / subject are not populated we need to get the defaults */
|
|
|
|
private function setTemplates()
|
|
|
|
{
|
2020-03-26 09:25:44 +01:00
|
|
|
if (strlen($this->subject) == 0 && strlen($this->template) > 1) {
|
2020-03-26 04:23:57 +01:00
|
|
|
$subject_template = str_replace("template", "subject", $this->template);
|
|
|
|
$this->subject = EmailTemplateDefaults::getDefaultTemplate($subject_template, $this->settings_entity->locale());
|
|
|
|
}
|
|
|
|
|
2020-03-26 09:25:44 +01:00
|
|
|
if (strlen($this->body) == 0 && strlen($this->template) > 1) {
|
2020-03-26 04:23:57 +01:00
|
|
|
$this->body = EmailTemplateDefaults::getDefaultTemplate($this->template, $this->settings_entity->locale());
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function replaceValues()
|
|
|
|
{
|
2020-03-26 09:25:44 +01:00
|
|
|
if ($this->entity_obj) {
|
2020-03-26 04:23:57 +01:00
|
|
|
$this->entityValues();
|
2020-03-26 09:25:44 +01:00
|
|
|
} else {
|
2020-03-26 04:23:57 +01:00
|
|
|
$this->fakerValues();
|
2020-03-26 09:25:44 +01:00
|
|
|
}
|
2020-03-26 04:23:57 +01:00
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function fakerValues()
|
|
|
|
{
|
|
|
|
$labels = $this->makeFakerLabels();
|
|
|
|
$values = $this->makeFakerValues();
|
|
|
|
|
2020-04-15 02:30:52 +02:00
|
|
|
// $this->body = str_replace(array_keys($labels), array_values($labels), $this->body);
|
|
|
|
// $this->body = str_replace(array_keys($values), array_values($values), $this->body);
|
|
|
|
// $this->subject = str_replace(array_keys($labels), array_values($labels), $this->subject);
|
|
|
|
// $this->subject = str_replace(array_keys($values), array_values($values), $this->subject);
|
2020-03-26 04:23:57 +01:00
|
|
|
|
2020-04-15 02:30:52 +02:00
|
|
|
$this->body = strtr($this->body, $labels);
|
|
|
|
$this->body = strtr($this->body, $values);
|
|
|
|
|
|
|
|
$this->subject = strtr($this->subject, $labels);
|
|
|
|
$this->subject = strtr($this->subject, $values);
|
2020-03-26 04:23:57 +01:00
|
|
|
|
|
|
|
$converter = new CommonMarkConverter([
|
|
|
|
'allow_unsafe_links' => false,
|
|
|
|
]);
|
|
|
|
|
|
|
|
$this->body = $converter->convertToHtml($this->body);
|
|
|
|
}
|
|
|
|
|
|
|
|
private function entityValues()
|
|
|
|
{
|
|
|
|
$labels = $this->entity_obj->makeLabels();
|
|
|
|
$values = $this->entity_obj->makeValues();
|
|
|
|
|
2020-04-15 02:30:52 +02:00
|
|
|
$this->body = strtr($this->body, $labels);
|
|
|
|
$this->body = strtr($this->body, $values);
|
2020-03-26 04:23:57 +01:00
|
|
|
|
2020-04-15 02:30:52 +02:00
|
|
|
$this->subject = strtr($this->subject, $labels);
|
|
|
|
$this->subject = strtr($this->subject, $values);
|
2020-03-26 04:23:57 +01:00
|
|
|
|
|
|
|
$converter = new CommonMarkConverter([
|
|
|
|
'allow_unsafe_links' => false,
|
|
|
|
]);
|
|
|
|
|
|
|
|
$this->body = $converter->convertToHtml($this->body);
|
|
|
|
}
|
|
|
|
|
|
|
|
private function renderTemplate()
|
|
|
|
{
|
|
|
|
/* wrapper */
|
|
|
|
$email_style = $this->settings_entity->getSetting('email_style');
|
|
|
|
|
|
|
|
$data['title'] = '';
|
|
|
|
$data['body'] = '$body';
|
|
|
|
$data['footer'] = '';
|
|
|
|
|
|
|
|
if ($email_style == 'custom') {
|
|
|
|
$wrapper = $this->settings_entity->getSetting('email_style_custom');
|
2020-03-28 12:34:04 +01:00
|
|
|
|
|
|
|
/*If no custom design exists, send back a blank!*/
|
2020-04-04 12:32:42 +02:00
|
|
|
if (strlen($wrapper) > 1) {
|
2020-03-28 12:34:04 +01:00
|
|
|
$wrapper = $this->renderView($wrapper, $data);
|
2020-04-04 12:32:42 +02:00
|
|
|
} else {
|
2020-03-28 12:34:04 +01:00
|
|
|
$wrapper = '';
|
2020-04-04 12:32:42 +02:00
|
|
|
}
|
2020-03-26 04:23:57 +01:00
|
|
|
} else {
|
|
|
|
$wrapper = $this->getTemplate();
|
|
|
|
$wrapper = view($this->getTemplatePath($email_style), $data)->render();
|
|
|
|
}
|
|
|
|
|
|
|
|
$data = [
|
|
|
|
'subject' => $this->subject,
|
|
|
|
'body' => $this->body,
|
|
|
|
'wrapper' => $wrapper,
|
|
|
|
];
|
|
|
|
|
|
|
|
return $data;
|
|
|
|
}
|
2020-03-26 09:25:44 +01:00
|
|
|
}
|