File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/CustomerEmailTemplateController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\CustomerEmailTemplate;
use App\Model\SystemEmailTemplate;
class CustomerEmailTemplateController extends Controller
{
public function index(Request $request)
{
if (!$request->user()->can('list', new \App\Model\CustomerEmailTemplate())) {
return $this->notAuthorized();
}
return view('customer_email_templates.index');
}
public function list(Request $request)
{
if (!$request->user()->can('list', new \App\Model\CustomerEmailTemplate())) {
return $this->notAuthorized();
}
// view
$view = $request->view ? $request->view : 'grid';
$customerEmailTemplates = CustomerEmailTemplate::query();
if (!empty($request->category_uid)) {
$customerEmailTemplates = $customerEmailTemplates->categoryUid($request->category_uid);
}
$customerEmailTemplates = $customerEmailTemplates->search($request->keyword)
->orderBy($request->sort_order, $request->sort_direction)
->paginate($request->per_page ? $request->per_page : 12);
return view('customer_email_templates._list_' . $view, [
'customerEmailTemplates' => $customerEmailTemplates,
]);
}
public function add(Request $request)
{
$customerEmailTemplate = $request->user()->customer->local()->newCustomerEmailTemplate();
$customerEmailTemplate->name = trans('messages.untitled_template');
// authorize
if (!$request->user()->can('create', CustomerEmailTemplate::class)) {
return $this->notAuthorized();
}
// validate and save posted data
if ($request->isMethod('post')) {
$currentSystemEmailTemplate = SystemEmailTemplate::findByUid($request->template);
\App\Services\TemplateService::for($customerEmailTemplate)
->setTemplate($currentSystemEmailTemplate->template, $request->name);
return redirect()->action('CustomerEmailTemplateController@builder', $customerEmailTemplate->uid);
}
return view('customer_email_templates.add', [
'customerEmailTemplate' => $customerEmailTemplate,
]);
}
public function templates(Request $request)
{
// authorize
if (!$request->user()->can('create', CustomerEmailTemplate::class)) {
return $this->notAuthorized();
}
//
$systemEmailTemplates = SystemEmailTemplate::query();
// filter by category
if (!empty($request->category_uid)) {
$systemEmailTemplates = $systemEmailTemplates->categoryUid($request->category_uid);
}
// sort, pagination
$systemEmailTemplates = $systemEmailTemplates->search($request->keyword)
->orderBy($request->sort_order, $request->sort_direction)
->paginate($request->per_page);
return view('customer_email_templates.templates', [
'systemEmailTemplates' => $systemEmailTemplates,
]);
}
public function builder(Request $request, $uid)
{
// Generate info
$customerEmailTemplate = CustomerEmailTemplate::findByUid($uid);
// authorize
if (!$request->user()->can('update', $customerEmailTemplate)) {
return $this->notAuthorized();
}
// validate and save posted data
if ($request->isMethod('post')) {
//
$validator = $customerEmailTemplate->updateContent($request->json, $request->content);
//
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
//
return response()->json([
'status' => 'success',
]);
}
return view('customer_email_templates.builder', [
'customerEmailTemplate' => $customerEmailTemplate,
'templates' => SystemEmailTemplate::get()->map(function ($item, $key) {
return $item->template;
}),
]);
}
public function changeName(Request $request)
{
$customerEmailTemplate = CustomerEmailTemplate::findByUid($request->uid);
// authorize
if (!$request->user()->can('update', $customerEmailTemplate)) {
return $this->notAuthorized();
}
if ($request->isMethod('post')) {
// change name
$validator = $customerEmailTemplate->changeName($request->name);
if ($validator->fails()) {
return response()->view('customer_email_templates.changeName', [
'customerEmailTemplate' => $customerEmailTemplate,
'errors' => $validator->errors(),
], 400);
}
return response()->json([
'status' => 'success',
'message' => trans('messages.template.name.changed'),
], 201);
}
return view('customer_email_templates.changeName', [
'customerEmailTemplate' => $customerEmailTemplate,
]);
}
public function preview(Request $request, $uid)
{
$customerEmailTemplate = CustomerEmailTemplate::findByUid($uid);
// authorize
if (!$request->user()->can('preview', $customerEmailTemplate)) {
return $this->notAuthorized();
}
return $customerEmailTemplate->template->getPreviewContent();
}
public function copy(Request $request)
{
$customerEmailTemplate = CustomerEmailTemplate::findByUid($request->uid);
if ($request->isMethod('post')) {
// authorize
if (!$request->user()->can('copy', $customerEmailTemplate)) {
return $this->notAuthorized();
}
// copy
$customerEmailTemplate->copy($request->name);
echo trans('messages.template.copied');
return;
}
return view('customer_email_templates.copy', [
'customerEmailTemplate' => $customerEmailTemplate,
]);
}
public function delete(Request $request)
{
$customerEmailTemplates = CustomerEmailTemplate::whereIn('uid', is_array($request->uids) ? $request->uids : explode(',', $request->uids))->get();
//
foreach ($customerEmailTemplates as $customerEmailTemplate) {
if (!$request->user()->can('delete', $customerEmailTemplate)) {
return $this->notAuthorized();
}
// delete
$customerEmailTemplate->deleteAndCleanup();
}
//
echo trans('messages.template.deleted');
}
}