Files
HRM-System/app/Http/Controllers/EmailTemplateController.php
2026-04-13 08:16:56 +08:00

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()]));
}
}
}