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