krgm.so-manager-dev.com/app/Http/Controllers/Admin/SettingController.php

188 lines
5.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
class SettingController extends Controller
{
/**
* 一覧(絞り込みなし・ページングのみ): /settings
*/
public function list(Request $request)
{
$perPage = \App\Utils::item_per_page ?? 20;
// リクエストから取得
$sort = $request->input('sort', 'setting_id');
$sort_type = $request->input('sort_type', 'asc');
// 許可されたカラムのみソート(安全対策)
$allowedSorts = ['setting_id', 'setting_key', 'setting_value']; // ← 必要に応じて増やす
if (!in_array($sort, $allowedSorts)) {
$sort = 'setting_id';
}
if (!in_array($sort_type, ['asc', 'desc'])) {
$sort_type = 'desc';
}
$list = Setting::orderBy($sort, $sort_type)->paginate($perPage);
return view('admin.settings.list', [
'list' => $list,
'sort' => $sort,
'sort_type' => $sort_type,
]);
}
/**
* 新規追加GET/POST: /settings/add
*/
public function add(Request $request)
{
if ($request->isMethod('post')) {
$v = Validator::make($request->all(), $this->rules());
if ($v->fails()) {
return back()->withErrors($v)->withInput();
}
// チェックボックス(未送信時は false
$data = $this->onlyFillable($request);
$data['printable_alert_flag'] = $request->boolean('printable_alert_flag');
DB::transaction(function () use ($data) {
Setting::create($data);
});
return redirect()->route('settings')->with('success', '設定を登録しました。');
}
// GET時空フォーム表示
return view('admin.settings.add', [
'setting' => new Setting(), // フォーム初期化用
'isEdit' => false,
]);
}
/**
* 編集GET/POST: /settings/edit/{id}
*/
public function edit(Request $request, int $id)
{
$setting = Setting::findOrFail($id);
if ($request->isMethod('post')) {
$v = Validator::make($request->all(), $this->rules($id));
if ($v->fails()) {
return back()->withErrors($v)->withInput();
}
$data = $this->onlyFillable($request);
$data['printable_alert_flag'] = $request->boolean('printable_alert_flag');
DB::transaction(function () use ($setting, $data) {
$setting->update($data);
});
return redirect()->route('settings')->with('success', '設定を更新しました。');
}
// GET時編集フォーム表示
return view('admin.settings.edit', [
'setting' => $setting,
'isEdit' => true,
]);
}
/**
* 詳細表示: /settings/info/{id}
*/
public function info(int $id)
{
$setting = Setting::findOrFail($id);
return view('admin.settings.info', [
'setting' => $setting,
'isInfo' => true,
'isEdit' => false,
]);
}
/**
* 削除(一覧/編集 共通対応): /settings/delete または /settings/delete/{id}
*/
public function delete(Request $request, $id = null)
{
// 一覧画面checkbox で複数削除)
$ids = $request->input('ids');
// 編集画面(単体削除)
if ($id) {
$ids = [$id];
}
// 削除対象が空
if (empty($ids)) {
return redirect()->route('settings')->with('error', '削除対象が選択されていません。');
}
// 削除処理
Setting::destroy($ids);
return redirect()->route('settings')->with('success', '設定を削除しました。');
}
// ===== バリデーション・ユーティリティ =====
/**
* バリデーションルール
*/
private function rules(?int $id = null): array
{
return [
'edit_master' => ['nullable','string','max:255'],
'web_master' => ['nullable','string','max:255'],
'auto_change_date' => ['nullable','date'],
'auto_chage_master' => ['nullable','string','max:255'], // ※カラム名は仕様通り
're-issue_alert_number' => ['nullable','integer','min:0'],
'image_base_url1' => ['nullable','string','max:255'],
'image_base_url2' => ['nullable','string','max:255'],
'printable_alert_flag' => ['nullable','boolean'],
'printable_number' => ['nullable','integer','min:0'],
'printable_alert_number' => ['nullable','integer','min:0'],
'printer_keep_alive' => ['nullable','integer','min:0'],
'operator_id' => ['nullable','integer','min:0'],
];
}
/**
* フォームから fillable のみ抽出
*/
private function onlyFillable(Request $request): array
{
return $request->only([
'edit_master',
'web_master',
'auto_change_date',
'auto_chage_master',
're-issue_alert_number',
'image_base_url1',
'image_base_url2',
'printable_number',
'printable_alert_number',
'printer_keep_alive',
'operator_id',
'printable_alert_flag',
]);
}
}