116 lines
4.0 KiB
PHP
116 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\EmailTemplate;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
|
|
class EmailTemplateController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$query = EmailTemplate::with('emailTemplateLangs');
|
|
|
|
// Search functionality
|
|
if ($request->has('search') && !empty($request->search)) {
|
|
$query->where(function ($q) use ($request) {
|
|
$q->where('name', 'like', '%' . $request->search . '%')
|
|
->orWhere('from', 'like', '%' . $request->search . '%');
|
|
});
|
|
}
|
|
|
|
// Handle sorting
|
|
$sortField = $request->get('sort_field', 'created_at');
|
|
$sortDirection = $request->get('sort_direction', 'asc');
|
|
|
|
// Validate sort field
|
|
$allowedSortFields = ['name', 'created_at', 'id'];
|
|
if (!in_array($sortField, $allowedSortFields)) {
|
|
$sortField = 'created_at';
|
|
}
|
|
|
|
$query->orderBy($sortField, $sortDirection);
|
|
|
|
$templates = $query->paginate($request->per_page ?? 10);
|
|
|
|
return Inertia::render('email-templates/index', [
|
|
'templates' => $templates,
|
|
'filters' => $request->all(['search', 'sort_field', 'sort_direction', 'per_page'])
|
|
]);
|
|
}
|
|
|
|
public function show(EmailTemplate $emailTemplate)
|
|
{
|
|
$template = $emailTemplate->load('emailTemplateLangs');
|
|
$languages = json_decode(file_get_contents(resource_path('lang/language.json')), true);
|
|
|
|
// Template-specific variables
|
|
$variables = [];
|
|
|
|
if ($template->name === 'Appointment Created') {
|
|
$variables = [
|
|
'{app_name}' => 'App Name',
|
|
'{appointment_name}' => 'Appointment Name',
|
|
'{appointment_email}' => 'Appointment Email',
|
|
'{appointment_phone}' => 'Appointment Phone',
|
|
'{appointment_date}' => 'Appointment Date',
|
|
'{appointment_time}' => 'Appointment Time'
|
|
];
|
|
} elseif ($template->name === 'User Created') {
|
|
$variables = [
|
|
'{app_url}' => 'App URL',
|
|
'{user_name}' => 'User Name',
|
|
'{user_email}' => 'User Email',
|
|
'{user_password}' => 'User Password',
|
|
'{user_type}' => 'User Type'
|
|
];
|
|
}
|
|
|
|
return Inertia::render('email-templates/show', [
|
|
'template' => $template,
|
|
'languages' => $languages,
|
|
'variables' => $variables
|
|
]);
|
|
}
|
|
|
|
public function updateSettings(EmailTemplate $emailTemplate, Request $request)
|
|
{
|
|
try {
|
|
$request->validate([
|
|
'from' => 'required|string|max:255'
|
|
]);
|
|
|
|
$emailTemplate->update([
|
|
'from' => $request->from
|
|
]);
|
|
|
|
return redirect()->back()->with('success', __('Template settings updated successfully.'));
|
|
} catch (\Exception $e) {
|
|
return redirect()->back()->with('error', __('Failed to update template settings: :error', ['error' => $e->getMessage()]));
|
|
}
|
|
}
|
|
|
|
public function updateContent(EmailTemplate $emailTemplate, Request $request)
|
|
{
|
|
try {
|
|
$request->validate([
|
|
'lang' => 'required|string|max:10',
|
|
'subject' => 'required|string|max:255',
|
|
'content' => 'required|string'
|
|
]);
|
|
|
|
$emailTemplate->emailTemplateLangs()
|
|
->where('lang', $request->lang)
|
|
->update([
|
|
'subject' => $request->subject,
|
|
'content' => $request->content
|
|
]);
|
|
|
|
return redirect()->back()->with('success', __('Email content updated successfully.'));
|
|
} catch (\Exception $e) {
|
|
return redirect()->back()->with('error', __('Failed to update email content: :error', ['error' => $e->getMessage()]));
|
|
}
|
|
}
|
|
}
|