krgm.so-manager-dev.com/app/Http/Controllers/Admin/StationController.php
kin.rinzen 4df74f116c
All checks were successful
Deploy main / deploy (push) Successful in 24s
「指摘対応」SWA-65修正
2025-10-10 19:37:05 +09:00

214 lines
6.6 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 Illuminate\Http\Request;
use App\Models\Station;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
use App\Models\Park;
class StationController extends Controller
{
/**
* 一覧表示
*/
public function list(Request $request)
{
$sort = $request->input('sort', 'station_id');
$sort_type = $request->input('sort_type', 'asc');
$allowedSorts = [
'station_id',
'park_id',
'station_neighbor_station',
'station_name_ruby',
'station_route_name'
];
if (!in_array($sort, $allowedSorts)) {
$sort = 'station_id';
}
if (!in_array($sort_type, ['asc', 'desc'])) {
$sort_type = 'asc';
}
$list = Station::select([
'station_id',
'station_neighbor_station',
'station_name_ruby',
'station_route_name',
'park_id',
'operator_id',
'station_latitude',
'station_longitude',
])
->orderBy($sort, $sort_type)
->paginate(20);
return view('admin.stations.list', compact('list', 'sort', 'sort_type'));
}
public function add(Request $request)
{
if ($request->isMethod('get')) {
// 駐車場リストを取得(プルダウン用)
$parks = Park::orderBy('park_name')->pluck('park_name', 'park_id');
// 新規時:空レコードを渡す
return view('admin.stations.add', [
'isEdit' => false,
'record' => new Station(),
'parks' => $parks, // ← これを追加
]);
}
// POST時バリデーション
$rules = [
'station_neighbor_station' => 'required|string|max:255',
'station_name_ruby' => 'required|string|max:255',
'station_route_name' => 'required|string|max:255',
'station_latitude' => 'required|numeric',
'station_longitude' => 'required|numeric',
'operator_id' => 'nullable|integer',
'park_id' => 'required|integer',
];
$messages = [
'station_latitude.required' => '緯度は必須項目です。',
'station_longitude.required' => '経度は必須項目です。',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
DB::transaction(function () use ($request) {
Station::create($request->only([
'station_neighbor_station',
'station_name_ruby',
'station_route_name',
'station_latitude',
'station_longitude',
'park_id',
'operator_id',
]));
});
return redirect()->route('stations')->with('success', '登録しました。');
}
/**
* 編集(画面/処理)
*/
public function edit(Request $request, $id)
{
$record = Station::findOrFail($id);
if ($request->isMethod('get')) {
// 駐車場リストを取得(プルダウン用)
$parks = Park::orderBy('park_name')->pluck('park_name', 'park_id');
return view('admin.stations.edit', [
'isEdit' => true,
'record' => $record,
'parks' => $parks, // ← ここを追加
]);
}
// ▼ POST時バリデーション
$rules = [
'station_neighbor_station' => 'required|string|max:255',
'station_name_ruby' => 'required|string|max:255',
'station_route_name' => 'required|string|max:255',
'station_latitude' => 'required|numeric',
'station_longitude' => 'required|numeric',
'operator_id' => 'nullable|integer',
'park_id' => 'required|integer',
];
$messages = [
'station_latitude.required' => '緯度は必須項目です。',
'station_longitude.required' => '経度は必須項目です。',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
DB::transaction(function () use ($request, $record) {
$record->update($request->only([
'station_neighbor_station',
'station_name_ruby',
'station_route_name',
'park_id',
'operator_id',
'station_latitude',
'station_longitude',
]));
});
return redirect()->route('stations')->with('success', '更新しました。');
}
/**
* 削除(単一/複数対応)
*/
public function delete(Request $request)
{
$ids = [];
if ($request->filled('id')) {
$ids[] = (int) $request->input('id');
}
if (is_array($request->input('pk'))) {
$ids = array_merge($ids, $request->input('pk'));
}
$ids = array_values(array_unique(array_map('intval', $ids)));
if (empty($ids)) {
return back()->with('error', '削除対象が選択されていません。');
}
Station::whereIn('station_id', $ids)->delete();
return redirect()->route('stations')->with('success', '削除しました');
}
/**
* CSVインポート
*/
public function import(Request $request)
{
// TODO: 実装予定
return redirect()->route('stations')->with('info', 'CSVインポートは未実装です');
}
/**
* CSVエクスポート
*/
public function export()
{
return response()->streamDownload(function () {
// Excel用のUTF-8 BOM
echo "\xEF\xBB\xBF";
echo "station_id,station_neighbor_station,station_name_ruby,station_route_name,park_id,operator_id\n";
foreach (Station::all() as $station) {
echo "{$station->station_id},{$station->station_neighbor_station},{$station->station_name_ruby},{$station->station_route_name},{$station->park_id},{$station->operator_id}\n";
}
}, 'stations.csv');
}
}