simplify variables names for templates, refactor to be multi-model

This commit is contained in:
Ludovic CANDELLIER
2023-03-28 00:17:04 +02:00
parent 938d6a9cbd
commit 7d1a34a12e
11 changed files with 89 additions and 75 deletions

View File

@@ -56,9 +56,9 @@ class MailTemplateController extends Controller
return view('Admin.Core.Mail.MailTemplate.partials.vars', $data); return view('Admin.Core.Mail.MailTemplate.partials.vars', $data);
} }
public function preview($template_id, $user_id) public function preview($template_id, $model_id)
{ {
return MailTemplates::preview($template_id, $user_id); return MailTemplates::preview($template_id, $model_id);
} }
public function modalPreview($template_id) public function modalPreview($template_id)

View File

@@ -3,15 +3,14 @@
namespace App\Mail; namespace App\Mail;
use App\Models\Core\Mail\MailTemplate; use App\Models\Core\Mail\MailTemplate;
use App\Repositories\Shop\Traits\MailCustomers;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailables\Address;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels;
use Spatie\MailTemplates\TemplateMailable; use Spatie\MailTemplates\TemplateMailable;
class Acheminement extends TemplateMailable class Acheminement extends TemplateMailable
{ {
use Queueable, SerializesModels; use MailCustomers, Queueable, SerializesModels;
protected static $templateModelClass = MailTemplate::class; protected static $templateModelClass = MailTemplate::class;
@@ -29,12 +28,4 @@ class Acheminement extends TemplateMailable
$this->male = $user->gender == 1; $this->male = $user->gender == 1;
$this->subject = $subject; $this->subject = $subject;
} }
public function envelope()
{
return new Envelope(
from: new Address('boutique@jardinenvie.com', 'Boutique Jardin\'Envie'),
subject: $this->subject,
);
}
} }

View File

@@ -3,38 +3,33 @@
namespace App\Mail; namespace App\Mail;
use App\Models\Core\Mail\MailTemplate; use App\Models\Core\Mail\MailTemplate;
use App\Repositories\Shop\Traits\MailCustomers;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailables\Address;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels;
use Spatie\MailTemplates\TemplateMailable; use Spatie\MailTemplates\TemplateMailable;
class Bienvenue extends TemplateMailable class Bienvenue extends TemplateMailable
{ {
use Queueable, SerializesModels; use MailCustomers, Queueable, SerializesModels;
protected static $templateModelClass = MailTemplate::class; protected static $templateModelClass = MailTemplate::class;
public $user; public $email;
public $male; public $nom;
public $prenom;
public $societe;
public $subject; public $subject;
public $url;
public function __construct($user, $subject = '') public function __construct($user, $subject = '')
{ {
$this->user = $user; $this->prenom = $user->first_name;
$this->male = $user->gender == 1; $this->nom = $user->last_name;
$this->societe = $user->society;
$this->email = $user->email;
$this->subject = $subject; $this->subject = $subject;
} }
public function envelope()
{
return new Envelope(
from: new Address('boutique@jardinenvie.com', 'Jardin\'en\'Vie'),
subject: $this->subject,
);
}
} }

View File

@@ -3,15 +3,14 @@
namespace App\Mail; namespace App\Mail;
use App\Models\Core\Mail\MailTemplate; use App\Models\Core\Mail\MailTemplate;
use App\Repositories\Shop\Traits\MailCustomers;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailables\Address;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels;
use Spatie\MailTemplates\TemplateMailable; use Spatie\MailTemplates\TemplateMailable;
class ConfirmationCommande extends TemplateMailable class ConfirmationCommande extends TemplateMailable
{ {
use Queueable, SerializesModels; use MailCustomers, Queueable, SerializesModels;
protected static $templateModelClass = MailTemplate::class; protected static $templateModelClass = MailTemplate::class;
@@ -21,20 +20,10 @@ class ConfirmationCommande extends TemplateMailable
public $subject; public $subject;
public $url;
public function __construct($user, $subject = '') public function __construct($user, $subject = '')
{ {
$this->user = $user; $this->user = $user;
$this->male = $user->gender == 1; $this->male = $user->gender == 1;
$this->subject = $subject; $this->subject = $subject;
} }
public function envelope()
{
return new Envelope(
from: new Address('boutique@jardinenvie.com', 'Boutique Jardin\'Envie'),
subject: $this->subject,
);
}
} }

View File

@@ -3,38 +3,33 @@
namespace App\Mail; namespace App\Mail;
use App\Models\Core\Mail\MailTemplate; use App\Models\Core\Mail\MailTemplate;
use App\Repositories\Shop\Traits\MailCustomers;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailables\Address;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels;
use Spatie\MailTemplates\TemplateMailable; use Spatie\MailTemplates\TemplateMailable;
class Preparation extends TemplateMailable class Preparation extends TemplateMailable
{ {
use Queueable, SerializesModels; use MailCustomers, Queueable, SerializesModels;
protected static $templateModelClass = MailTemplate::class; protected static $templateModelClass = MailTemplate::class;
public $user; public $email;
public $male; public $nom;
public $prenom;
public $societe;
public $subject; public $subject;
public $url;
public function __construct($user, $subject = '') public function __construct($user, $subject = '')
{ {
$this->user = $user; $this->prenom = $user->first_name;
$this->male = $user->gender == 1; $this->nom = $user->last_name;
$this->societe = $user->society;
$this->email = $user->email;
$this->subject = $subject; $this->subject = $subject;
} }
public function envelope()
{
return new Envelope(
from: new Address('boutique@jardinenvie.com', 'Boutique Jardin\'Envie'),
subject: $this->subject,
);
}
} }

View File

@@ -38,16 +38,17 @@ class MailTemplates
return [ return [
'id' => $id, 'id' => $id,
'users' => $mailable::getUsers(), 'list' => $mailable::getContext(),
]; ];
} }
public static function preview($id, $user_id) public static function preview($id, $model_id)
{ {
$template = self::get($id); $template = self::get($id);
$mailable = $template->mailable; $mailable = $template->mailable;
$data = $mailable::getDataByUser($user_id); $data = $mailable::getData($model_id);
$html_template = $template->toArray()['html_template_translations'][$data['lang']] ?? false;
$html_template = $template->toArray()['html_template_translations'][$data['lang'] ?? 'fr'] ?? false;
if ($html_template) { if ($html_template) {
$m = new Mustache_Engine(); $m = new Mustache_Engine();

View File

@@ -18,6 +18,11 @@ class Customers
return Customer::count(); return Customer::count();
} }
public static function getOptions()
{
return Customer::pluck('last_name', 'id');
}
public static function editProfile($id = false) public static function editProfile($id = false)
{ {
$id = $id ? $id : self::getId(); $id = $id ? $id : self::getId();

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Repositories\Shop\Traits;
use App\Repositories\Shop\Customers;
use App\Repositories\Core\DateTime;
use Illuminate\Mail\Mailables\Address;
use Illuminate\Mail\Mailables\Envelope;
trait MailCustomers
{
public static function getContext()
{
return Customers::getOptions();
}
public static function getData($id)
{
$user = self::getUser($id);
return $user ? [
'prenom' => $user->first_name,
'nom' => $user->last_name,
'societe' => $user->society,
'email' => $user->email,
] : false;
}
public static function getUser($id)
{
return Customers::get($id);
}
public function envelope()
{
return new Envelope(
from: new Address('boutique@jardinenvie.com', 'Jardin\'en\'Vie'),
subject: $this->subject,
);
}
}

View File

@@ -5,9 +5,9 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col-6"> <div class="col-6">
@include('components.form.select', [ @include('components.form.select', [
'id_name' => 'user_id', 'id_name' => 'model_id',
'name' => 'user_id', 'name' => 'model_id',
'list' => $users, 'list' => $list,
'class' => 'select2', 'class' => 'select2',
'with_empty' => '', 'with_empty' => '',
'label' => __('Core.users.name'), 'label' => __('Core.users.name'),
@@ -23,13 +23,10 @@
<script> <script>
initSelect2(); initSelect2();
$('#user_id').change(function() { $('#model_id').change(function() {
console.log('ici'); var model_id = $(this).find(":selected").val();
var user_id = $(this).find(":selected").val();
var template_id = $('#template_id').val(); var template_id = $('#template_id').val();
console.log(user_id); var url = "{{ route('Admin.Core.Mail.MailTemplate.preview') }}/" + template_id + '/' + model_id;
console.log(template_id);
var url = "{{ route('Admin.Core.Mail.MailTemplate.preview') }}/" + template_id + '/' + user_id;
$.get(url, function(data) { $.get(url, function(data) {
$('#previewTemplate').html(data); $('#previewTemplate').html(data);
}); });

View File

@@ -32,7 +32,7 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col-12"> <div class="col-12">
{{ Form::label('', __('Description')) }} {{ Form::label('', __('Description')) }}
<textarea name="description" class="form-control">{{ $delivery['description'] }}</textarea> <textarea name="description" class="form-control">{{ $delivery['description'] ?? '' }}</textarea>
</div> </div>
</div> </div>

View File

@@ -7,6 +7,6 @@ Route::prefix('MailTemplate')->name('MailTemplate.')->group(function () {
Route::post('storeAjax', 'MailTemplateController@storeAjax')->name('storeAjax'); Route::post('storeAjax', 'MailTemplateController@storeAjax')->name('storeAjax');
Route::any('', 'MailTemplateController@index')->name('index'); Route::any('', 'MailTemplateController@index')->name('index');
Route::get('getVars/{mailable?}', 'MailTemplateController@getVarsByMailable')->name('getVarsByMailable'); Route::get('getVars/{mailable?}', 'MailTemplateController@getVarsByMailable')->name('getVarsByMailable');
Route::get('preview/{template_id?}/{user_id?}', 'MailTemplateController@preview')->name('preview'); Route::get('preview/{template_id?}/{model_id?}', 'MailTemplateController@preview')->name('preview');
Route::get('modalPreview/{template_id?}', 'MailTemplateController@modalPreview')->name('modalPreview'); Route::get('modalPreview/{template_id?}', 'MailTemplateController@modalPreview')->name('modalPreview');
}); });