krgm.so-manager-dev.com/app/Http/Controllers/Admin/MailTemplateController.php
kin.rinzen af44534048
All checks were successful
Deploy main / deploy (push) Successful in 23s
画面構造・ボタン処理の統一
2025-09-05 22:32:43 +09:00

157 lines
4.4 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\MailTemplate;
class MailTemplateController extends Controller
{
/**
* 一覧表示
*/
public function list(Request $request)
{
if ($request->input('action') === 'reset') {
return redirect()->route('mail_templates');
}
// 許可されたソートカラム一覧
$allowedSorts = [
'mail_template_id',
'pg_id',
'internal_id',
'mgr_cc_flag',
'bcc_adrs',
'use_flag',
'memo',
'subject',
'text',
'created_at',
'updated_at',
'operator_id',
];
$sort = $request->input('sort', 'mail_template_id');
$sort_type = $request->input('sort_type', 'desc');
$allowedSorts = [
'mail_template_id', 'pg_id', 'internal_id', 'mgr_cc_flag',
'bcc_adrs', 'use_flag', 'memo', 'subject', 'text',
'created_at', 'updated_at', 'operator_id'
];
if (!in_array($sort, $allowedSorts)) {
$sort = 'mail_template_id';
}
if (!in_array($sort_type, ['asc', 'desc'])) {
$sort_type = 'desc';
}
$query = MailTemplate::query();
// 絞り込み
if ($request->filled('mail_template_id')) {
$query->where('mail_template_id', $request->mail_template_id);
}
if ($request->filled('pg_id')) {
$query->where('pg_id', $request->pg_id);
}
if ($request->has('mgr_cc_flag') && $request->mgr_cc_flag !== '') {
$query->where('mgr_cc_flag', $request->mgr_cc_flag);
}
if ($request->has('use_flag') && $request->use_flag !== '') {
$query->where('use_flag', $request->use_flag);
}
if ($request->filled('subject')) {
$query->where('subject', 'LIKE', "%{$request->subject}%");
}
$templates = $query->orderBy($sort, $sort_type)->paginate(20);
return view('admin.mail_templates.list', compact(
'templates', 'sort', 'sort_type'
));
}
/**
* 新規登録
*/
public function add(Request $request)
{
if ($request->isMethod('post')) {
$data = $this->validateTemplate($request);
MailTemplate::create($data);
return redirect()->route('mail_templates')
->with('success', 'テンプレートを登録しました');
}
$mailTemplate = new MailTemplate();
return view('admin.mail_templates.add', compact('mailTemplate'));
}
/**
* 編集
*/
public function edit($id, Request $request)
{
$mailTemplate = MailTemplate::findOrFail($id);
if ($request->isMethod('post')) {
$data = $this->validateTemplate($request);
$mailTemplate->update($data);
return redirect()->route('mail_templates')
->with('success', 'テンプレートを更新しました');
}
return view('admin.mail_templates.edit', compact('mailTemplate'));
}
/**
* 詳細表示
*/
public function info($id)
{
$mailTemplate = MailTemplate::findOrFail($id);
return view('admin.mail_templates.info', compact('mailTemplate'));
}
/**
* 削除
*/
public function delete(Request $request)
{
$id = $request->input('id');
if ($id) {
MailTemplate::destroy($id);
return redirect()->route('mail_templates')->with('success', 'テンプレートを削除しました');
}
return redirect()->route('mail_templates')->with('error', '削除対象が指定されていません');
}
/**
* バリデーション共通化
*/
private function validateTemplate(Request $request)
{
return $request->validate([
'pg_id' => 'nullable|integer',
'internal_id' => 'nullable|integer',
'mgr_cc_flag' => 'nullable|boolean',
'bcc_adrs' => 'nullable|string|max:255',
'use_flag' => 'nullable|boolean',
'memo' => 'nullable|string|max:255',
'subject' => 'required|string|max:255',
'text' => 'required|string',
'operator_id' => 'nullable|integer',
]);
}
}