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()
{
if (strlen($this->entity) > 1 && strlen($this->entity_id) > 1) {
$class = 'App\Models\\'.ucfirst($this->entity);
$this->entity_obj = $class::whereId($this->decodePrimaryKey($this->entity_id))->company()->first();
}
else
$this->mockEntity();
return $this;
}
private function setSettingsObject()
{
if ($this->entity_obj) {
$this->settings_entity = $this->entity_obj->client;
$this->settings = $this->settings_entity->getMergedSettings();
} else {
$this->settings_entity = auth()->user()->company();
$this->settings = $this->settings_entity->settings;
}
return $this;
}
/* If the body / subject are not populated we need to get the defaults */
private function setTemplates()
{
if (strlen($this->subject) == 0 && strlen($this->template) > 1) {
$subject_template = str_replace('template', 'subject', $this->template);
if(strlen($this->settings_entity->getSetting($subject_template)) > 1)
$this->subject = $this->settings_entity->getSetting($subject_template);
else
$this->subject = EmailTemplateDefaults::getDefaultTemplate($subject_template, $this->settings_entity->locale());
}
if (strlen($this->body) == 0 && strlen($this->template) > 1) {
if(strlen($this->settings_entity->getSetting($this->template)) > 1)
$this->body = $this->settings_entity->getSetting($this->template);
else
$this->body = EmailTemplateDefaults::getDefaultTemplate($this->template, $this->settings_entity->locale());
}
return $this;
}
private function replaceValues()
{
if ($this->entity_obj) {
$this->entityValues($this->entity_obj->client->primary_contact()->first());
} else {
$this->fakerValues();
}
return $this;
}
private function fakerValues()
{
$labels = $this->makeFakerLabels();
$values = $this->makeFakerValues();
$this->body = strtr($this->body, $labels);
$this->body = strtr($this->body, $values);
$this->subject = strtr($this->subject, $labels);
$this->subject = strtr($this->subject, $values);
$converter = new CommonMarkConverter([
'allow_unsafe_links' => false,
]);
$this->body = $converter->convertToHtml($this->body);
}
private function entityValues($contact)
{
$data = $this->entity_obj->buildLabelsAndValues($contact);
// $arrKeysLength = array_map('strlen', array_keys($data));
// array_multisort($arrKeysLength, SORT_DESC, $data);
$this->body = strtr($this->body, $data['labels']);
$this->body = strtr($this->body, $data['values']);
$this->body = str_replace("\n", "
", $this->body);
$this->subject = strtr($this->subject, $data['labels']);
$this->subject = strtr($this->subject, $data['values']);
$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'] = '';
$data = array_merge($data, Helpers::sharedEmailVariables($this->entity_obj->client));
if ($email_style == 'custom') {
$wrapper = $this->settings_entity->getSetting('email_style_custom');
/*If no custom design exists, send back a blank!*/
if (strlen($wrapper) > 1) {
$wrapper = $this->renderView($wrapper, $data);
} else {
$wrapper = '';
}
} else {
$wrapper = view($this->getTemplatePath($email_style), $data)->render();
$injection = '