main_higashide #3

Merged
go.unhi merged 10 commits from main_higashide into main 2025-09-02 10:31:06 +09:00
7 changed files with 124 additions and 100 deletions
Showing only changes of commit 56d05014cb - Show all commits

View File

@ -16,7 +16,6 @@ use App\Http\Controllers\Controller;
class UserEditConfirmController extends Controller
{
use ValidatesRequests;
// GET: 確認画面表示(戻って修正するボタン等で利用)
public function show(Request $request)
{
$user_id = session('user_id');
@ -31,29 +30,14 @@ class UserEditConfirmController extends Controller
// 直前のPOST値をold()やsession()->get('_old_input')で取得
$input = session()->get('_old_input', []);
// 利用者区分ラベル変換
$ward_residents_label = '';
if (isset($input['ward_residents'])) {
if ($input['ward_residents'] === '0') {
$ward_residents_label = '一般';
} elseif ($input['ward_residents'] === '1') {
$ward_residents_label = '学生';
} elseif ($input['ward_residents'] === '2') {
$ward_residents_label = '減免';
} else {
$ward_residents_label = $input['ward_residents'];
}
}
return view('user.confirm', [
'user' => $user,
'input' => $input,
'ward_residents_label' => $ward_residents_label,
'active_menu' => 'SWC-1-1', // この画面のID
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]);
}
// 編集画面からのPOSTで入力内容確認画面を表示
public function confirm(Request $request)
{
$user_id = session('user_id');
@ -92,28 +76,18 @@ class UserEditConfirmController extends Controller
$input['photo_filename2'] = $filename2;
}
// 利用者区分ラベル変換
$ward_residents_label = '';
if (isset($input['ward_residents'])) {
if ($input['ward_residents'] === '0') {
$ward_residents_label = '一般';
} elseif ($input['ward_residents'] === '1') {
$ward_residents_label = '学生';
} elseif ($input['ward_residents'] === '2') {
$ward_residents_label = '減免';
} else {
$ward_residents_label = $input['ward_residents'];
}
}
\Log::info('ユーザー情報編集確認画面にアクセス', [
'user_id' => $user_id,
]);
return view('user.confirm', [
'user' => $user,
'input' => $input,
'ward_residents_label' => $ward_residents_label,
'active_menu' => 'SWC-1-1', // この画面のID
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]);
}
// 入力内容確認画面から「変更を確定する」ボタン押下時
public function submit(Request $request)
{
@ -126,7 +100,6 @@ class UserEditConfirmController extends Controller
return redirect('/login');
}
$token = Str::random(64);
$changeData = $request->except(['_token']);
$changeData['user_id'] = $user_id;
@ -144,8 +117,6 @@ class UserEditConfirmController extends Controller
$file2->storeAs('photo', $filename2, 'public');
$changeData['photo_filename2'] = $filename2;
}
// ※ public/storage/photo で画像が参照できない場合は、
// コマンドプロンプトで `php artisan storage:link` を実行してください。
Cache::put('change_request_' . $token, $changeData, now()->addDay());
@ -154,8 +125,12 @@ class UserEditConfirmController extends Controller
// Mailableでメール送信
Mail::to($changeData['user_primemail'])->send(new UserEditVerifyMail($verifyUrl, $user));
\Log::info('ユーザー情報変更メール送信完了画面にアクセス', [
'user_id' => $user_id,
]);
return view('user.mail_sent', [
'active_menu' => 'SWC-1-1', // この画面のID
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]);
}
@ -170,7 +145,7 @@ class UserEditConfirmController extends Controller
return redirect()->route('user.edit')->withErrors(['register_expired' => '登録期間が過ぎています。もう一度登録してください。']);
}
// 変更内容をDBに保存例: userテーブル更新
// 変更内容をDBに保存userテーブル更新
// 更新データ生成photo_filename1, photo_filename2, user_passは入力時のみ追加
$updateData = [
'user_gender' => $changeData['user_gender'] ?? null,
@ -184,7 +159,9 @@ class UserEditConfirmController extends Controller
'user_mobile' => implode('-', $changeData['user_mobile'] ?? []),
'user_primemail' => $changeData['user_primemail'],
'user_submail' => $changeData['user_submail'],
'ward_residents' => $changeData['ward_residents'],
// 利用者区分user_categoryidをusertypeテーブルから取得して登録
// 画面からはuser_category一般/学生)が渡ってくる
'user_categoryid' => self::getUserCategoryId($changeData['user_category'] ?? null),
'user_workplace' => $changeData['user_workplace'] ?? null,
'user_school' => $changeData['user_school'] ?? null,
'user_graduate' => $changeData['user_graduate'] ?? null,
@ -192,7 +169,7 @@ class UserEditConfirmController extends Controller
'user_relate_pre' => $changeData['user_relate_pre'],
'user_relate_city' => $changeData['user_relate_city'],
'user_relate_add' => $changeData['user_relate_add'],
'updated_at' => now(), // 追加: 認証時の日時
'updated_at' => now(), //
];
if (!empty($changeData['photo_filename1'])) {
$updateData['photo_filename1'] = $changeData['photo_filename1'];
@ -214,6 +191,16 @@ class UserEditConfirmController extends Controller
return redirect()->route('user.info')->with('success', '更新に成功しました。');
}
/**
* 利用者区分の文言(一般/学生からuser_categoryidを取得
*/
private static function getUserCategoryId($categoryName)
{
if (!$categoryName) return null;
$row = DB::table('usertype')->where('usertype_subject1', $categoryName)->first();
return $row ? $row->user_categoryid : null;
}
/**
* パスワードをSHA256→SALT連結→25回ストレッチでハッシュ化
*/

View File

@ -19,13 +19,21 @@ class UserEditController extends Controller
if (!$user_id) {
return redirect('/login');
}
$user = DB::table('user')->where('user_id', $user_id)->first();
if (!$user) {
return redirect('/login');
}
$user = DB::table('user')->where('user_id', $user_id)->first();
// 契約・更新期間判定(例: DBから契約情報取得
// 利用者区分をusertypeテーブルから取得
$user_category = '';
if (isset($user->user_categoryid)) {
$usertype = DB::table('usertype')
->where('user_categoryid', $user->user_categoryid)
->first();
if ($usertype && isset($usertype->usertype_subject1)) {
$user_category = $usertype->usertype_subject1;
}
}
// 契約・更新期間判定
$contract = DB::table('regular_contract')
->join('park', 'regular_contract.park_id', '=', 'park.park_id')
->where('regular_contract.user_id', $user->user_id)
@ -125,11 +133,16 @@ class UserEditController extends Controller
$user->user_relate_zip_1 = substr($user->user_relate_zip ?? '', 0, 3);
$user->user_relate_zip_2 = substr($user->user_relate_zip ?? '', 3, 4);
\Log::info('ユーザー情報編集画面にアクセス', [
'user_id' => $user_id,
]);
return view('user.edit', [
'user' => $user,
'user_category' => $user_category,
'is_update_period' => $is_update_period,
'in_contract_period' => $in_contract_period,
'active_menu' => 'SWC-1-1', // この画面のID
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]);
}
@ -143,10 +156,6 @@ class UserEditController extends Controller
return redirect('/login');
}
$user = DB::table('user')->where('user_id', $user_id)->first();
if (!$user) {
return redirect('/login');
}
// バリデーションルール
$rules = [
@ -162,7 +171,7 @@ class UserEditController extends Controller
'user_primemail' => 'required|email',
'user_primemail_confirmation' => 'required|same:user_primemail',
'user_submail' => 'nullable|email|different:user_primemail',
'ward_residents' => ['required', Rule::in(['0', '1', '2'])],
'user_category' => ['required', Rule::in(['一般', '学生'])],
'user_workplace' => 'nullable|string|max:50',
'user_school' => 'nullable|string|max:50',
'user_graduate' => 'nullable|date',
@ -183,7 +192,7 @@ class UserEditController extends Controller
];
// 利用者区分による必須項目
if ($request->ward_residents == '1') { // 学生
if ($request->user_category == '学生') {
$rules['user_school'] = 'required|string|max:50';
$rules['user_graduate'] = 'required|date';
}
@ -204,8 +213,8 @@ class UserEditController extends Controller
'user_primemail_confirmation.same' => '「メールアドレス」と「メールアドレスの確認」が一致しません。',
'user_submail.email' => '予備メールアドレスは正しい形式で入力してください。',
'user_submail.different' => 'メールアドレスと予備メールアドレスに同じアドレスを入力できません。',
'ward_residents.required' => '利用者区分は必須です。',
'ward_residents.in' => '利用者区分の値が不正です。',
'user_category.required' => '利用者区分は必須です。',
'user_category.in' => '利用者区分の値が不正です。',
'user_workplace.max' => '勤務先は50文字以内で入力してください。',
'user_school.max' => '学校名は50文字以内で入力してください。',
'user_school.required' => '学校名は必須です。',
@ -331,7 +340,7 @@ class UserEditController extends Controller
'user_workplace',
'user_school',
'user_graduate',
'ward_residents'
'user_category'
];
if (!$is_update_period) {
@ -367,7 +376,7 @@ class UserEditController extends Controller
$user->user_submail = $request->user_submail;
// 利用者区分
$user->ward_residents = $request->ward_residents;
$user->user_category = $request->user_category;
$user->user_workplace = $request->user_workplace;
$user->user_school = $request->user_school;
$user->user_graduate = $request->user_graduate;

View File

@ -15,22 +15,25 @@ class UserInfoController extends Controller
}
$user = DB::table('user')->where('user_id', $user_id)->first();
// 利用者区分の表示変換(取得できなければ空欄)
$ward_residents_label = '';
if (isset($user->ward_residents)) {
if ($user->ward_residents == 0) {
$ward_residents_label = '一般';
} elseif ($user->ward_residents == 1) {
$ward_residents_label = '学生';
} elseif ($user->ward_residents == 2) {
$ward_residents_label = '減免';
// 利用者区分をusertypeテーブルから取得
$user_category = '';
if (isset($user->user_categoryid)) {
$usertype = DB::table('usertype')
->where('user_categoryid', $user->user_categoryid)
->first();
if ($usertype && isset($usertype->usertype_subject1)) {
$user_category = $usertype->usertype_subject1;
}
}
\Log::info('ユーザー情報確認画面にアクセス', [
'user_id' => $user_id,
]);
return view('user.info', [
'user' => $user,
'ward_residents_label' => $ward_residents_label,
'active_menu' => 'SWC-1-1', // この画面のID
'user_category' => $user_category,
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]);
}

View File

@ -108,13 +108,13 @@
</div>
<!-- 利用者区分 -->
<div class="col-12 col-md-3 offset-0 offset-md-2">
<label for="user_categoryid">利用者区分</label>
<label for="user_category">利用者区分</label>
</div>
<div class="col-12 col-lg-6 mb10">
<h3>{{ $ward_residents_label }}</h3>
<input type="hidden" name="ward_residents" value="{{ $input['ward_residents'] }}">
<h3>{{ $input['user_category'] }}</h3>
<input type="hidden" name="user_category" value="{{ $input['user_category'] }}">
</div>
@if ($input['ward_residents'] === '1')
@if ($input['user_category'] === '学生')
<!-- 学生の場合:学校名・卒業予定のみ表示 -->
<div class="col-12 col-md-3 offset-0 offset-md-2">
<label for="user_school">学校名</label>
@ -131,7 +131,7 @@
<input type="hidden" name="user_graduate" value="{{ $input['user_graduate'] }}">
</div>
@else
<!-- 一般・減免の場合:勤務先名のみ表示 -->
<!-- 一般の場合:勤務先名のみ表示 -->
<div class="col-12 col-md-3 offset-0 offset-md-2">
<label for="user_workplace">勤務先名</label>
</div>

View File

@ -28,7 +28,7 @@
<h4 style="left: 0">入力内容に不備があります。</h4>
<div id="formErrorMessagesJs"></div>
</div>
<form class="row form" action="{{ route('user.edit.confirm') }}" method="post" enctype="multipart/form-data" autocomplete="off">
<form class="row form" action="{{ route('user.edit.post') }}" method="post" enctype="multipart/form-data" autocomplete="off">
@csrf
{{-- お名前(編集不可) --}}
<div class="col-12 col-md-3 offset-0 offset-md-2">
@ -124,7 +124,7 @@
<div class="col-12 col-lg-6 mb10">
<input type="date" class="form-control" id="user_birthdate" name="user_birthdate" value="{{ old('user_birthdate', $user->user_birthdate) }}" @if(!$is_update_period)readonly style="background:#eee;" @endif>
</div>
{{-- 年齢(自動計算 or 表示のみ) --}}
{{-- 年齢(自動計算 かつ 表示のみ) --}}
<div class="col-12 col-md-3 offset-0 offset-md-2">
<label for="user_age">年齢</label>
</div>
@ -181,39 +181,35 @@
<span style="display:inline-block; width:24px; height:24px; border-radius:50%; border:2px solid #007bff; text-align:center; line-height:20px; font-weight:bold; color:#007bff; font-size:16px; background:#fff;"></span>
</button>
</div>
<div class="col-12 col-lg-6 mb10">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="ward_residents" id="user_categoryid_ippan" value="0" {{ old('ward_residents', $user->ward_residents) == '0' ? 'checked' : '' }} @if(!$is_update_period)disabled @endif>
<label class="form-check-label" for="user_categoryid_ippan">一般</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="ward_residents" id="user_categoryid_gakusei" value="1" {{ old('ward_residents', $user->ward_residents) == '1' ? 'checked' : '' }} @if(!$is_update_period)disabled @endif>
<label class="form-check-label" for="user_categoryid_gakusei">学生</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="ward_residents" id="user_categoryid_genmen" value="2" {{ old('ward_residents', $user->ward_residents) == '2' ? 'checked' : '' }} @if(!$is_update_period)disabled @endif>
<label class="form-check-label" for="user_categoryid_genmen">減免</label>
</div>
<div class="col-12 col-lg-6 mb10">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="user_category" id="user_categoryid_ippan" value="一般" {{ old('user_category', $user_category) == '一般' ? 'checked' : '' }} @if(!$is_update_period)disabled @endif>
<label class="form-check-label" for="user_categoryid_ippan">一般</label>
</div>
{{-- 勤務先名(一般/減免のみ表示) --}}
<div class="col-12 col-md-3 offset-0 offset-md-2 user_workplace_area {{ old('ward_residents', $user->ward_residents) == 1 ? 'd-none' : '' }}">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="user_category" id="user_categoryid_gakusei" value="学生" {{ old('user_category', $user_category) == '学生' ? 'checked' : '' }} @if(!$is_update_period)disabled @endif>
<label class="form-check-label" for="user_categoryid_gakusei">学生</label>
</div>
</div>
{{-- 勤務先名(一般のみ表示) --}}
<div class="col-12 col-md-3 offset-0 offset-md-2 user_workplace_area {{ old('user_category', $user_category) == '学生' ? 'd-none' : '' }}">
<label for="user_workplace">勤務先名</label>
</div>
<div class="col-12 col-lg-6 mb10 user_workplace_area {{ old('ward_residents', $user->ward_residents) == 1 ? 'd-none' : '' }}">
<div class="col-12 col-lg-6 mb10 user_workplace_area {{ old('user_category', $user_category) == '学生' ? 'd-none' : '' }}">
<input type="text" class="form-control" id="user_workplace" name="user_workplace" value="{{ old('user_workplace', $user->user_workplace) }}" @if(!$is_update_period)readonly style="background:#eee;" @endif>
</div>
{{-- 学校名(学生のみ表示) --}}
<div class="col-12 col-md-3 offset-0 offset-md-2 user_school_area {{ old('ward_residents', $user->ward_residents) == 1 ? '' : 'd-none' }}">
<div class="col-12 col-md-3 offset-0 offset-md-2 user_school_area {{ old('user_category', $user_category) == '学生' ? '' : 'd-none' }}">
<label for="user_school">学校名</label>
</div>
<div class="col-12 col-lg-6 mb10 user_school_area {{ old('ward_residents', $user->ward_residents) == 1 ? '' : 'd-none' }}">
<div class="col-12 col-lg-6 mb10 user_school_area {{ old('user_category', $user_category) == '学生' ? '' : 'd-none' }}">
<input type="text" class="form-control" id="user_school" name="user_school" value="{{ old('user_school', $user->user_school) }}" @if(!$is_update_period)readonly style="background:#eee;" @endif>
</div>
{{-- 卒業予定(学生のみ表示) --}}
<div class="col-12 col-md-3 offset-0 offset-md-2 user_graduate_area {{ old('ward_residents', $user->ward_residents) == 1 ? '' : 'd-none' }}">
<div class="col-12 col-md-3 offset-0 offset-md-2 user_graduate_area {{ old('user_category', $user_category) == '学生' ? '' : 'd-none' }}">
<label for="user_graduate">卒業予定</label>
</div>
<div class="col-12 col-lg-6 mb10 user_graduate_area {{ old('ward_residents', $user->ward_residents) == 1 ? '' : 'd-none' }}">
<div class="col-12 col-lg-6 mb10 user_graduate_area {{ old('user_category', $user_category) == '学生' ? '' : 'd-none' }}">
<input type="date" class="form-control" id="user_graduate" name="user_graduate" value="{{ old('user_graduate', $user->user_graduate) }}" @if(!$is_update_period)readonly style="background:#eee;" @endif>
</div>
{{-- 住所(関連) --}}
@ -283,13 +279,11 @@
<div class="col-12 col-lg-6 mb10">
<span>おもて</span>
<input type="file" id="photo_filename1" name="photo_filename1" accept="image/*" style="width:auto; display:inline-block;">
<span style="margin-left:8px;">{{ $user->photo_filename1 ?? '' }}</span>
</div>
<div class="col-12 col-md-3 offset-0 offset-md-2"></div>
<div class="col-12 col-lg-6 mb10">
<span>ウ ラ</span>
<input type="file" id="photo_filename2" name="photo_filename2" accept="image/*" style="width:auto; display:inline-block;">
<span style="margin-left:8px;">{{ $user->photo_filename2 ?? '' }}</span>
</div>
{{-- パスワード変更 --}}
<div class="col-12 col-md-3 offset-0 offset-md-2">
@ -492,7 +486,6 @@
}
document.getElementById('user_categoryid_ippan').addEventListener('change', toggleUserTypeFields);
document.getElementById('user_categoryid_gakusei').addEventListener('change', toggleUserTypeFields);
document.getElementById('user_categoryid_genmen').addEventListener('change', toggleUserTypeFields);
window.addEventListener('DOMContentLoaded', function() {
toggleUserTypeFields();
});

View File

@ -55,10 +55,10 @@
<h3>{{ $user->user_submail }}</h3>
</div>
<div class="col-12 col-md-3 offset-0 offset-md-2">
<label for="ward_residents">利用者区分</label>
<label for="user_category">利用者区分</label>
</div>
<div class="col-12 col-lg-6 mb10">
<h3>{{ $ward_residents_label }}</h3>
<h3>{{ $user_category }}</h3>
</div>
@if ($user->ward_residents == 0 || $user->ward_residents == 2)
<div class="col-12 col-md-3 offset-0 offset-md-2">

View File

@ -12,7 +12,9 @@ use App\Http\Controllers\UserEditController;
use App\Http\Controllers\UserEditConfirmController;
use App\Http\Controllers\UserWithdrawController;
use App\Http\Controllers\RegularContractController;
use App\Http\Controllers\RegularContractCreateController;
use App\Http\Controllers\ParkWaitlistController;
use App\Http\Controllers\ReceiptController;
Route::get('/', function () {
return redirect()->route('login');
@ -53,10 +55,40 @@ Route::get('/user/withdraw', [UserWithdrawController::class, 'showConfirm'])
Route::post('/user/withdraw/confirm', [UserWithdrawController::class, 'withdraw'])
->name('user.withdraw.confirm');
// 定期契約情報確認
Route::get('regular_contract/info', [RegularContractController::class, 'showInfo'])
->name('regular_contract.info');
// 領収書宛名入力画面
Route::get('receipt/input/{contract_id}', [ReceiptController::class, 'input'])
->name('receipt.input');
Route::get('receipt/download/{contract_id}', [ReceiptController::class, 'download'])
->name('receipt.download');
Route::post('receipt/issue/{contract_id}', [ReceiptController::class, 'issue']);
// 新規定期契約画面
Route::get('regular_contract/create', [RegularContractCreateController::class, 'show'])
->name('regular_contract.create');
// 定期契約更新
Route::get('regular_contract/update/{contract_id}', [RegularContractController::class, 'update']);
// 契約区分確認
Route::get('regular_contract/confirm_category/{contract_id}', [RegularContractController::class, 'confirmCategory'])
->name('regular_contract.confirm_category');
Route::get('regular_contract/confirm_category_next/{contract_id}', [RegularContractController::class, 'confirmCategoryNext'])
->name('regular_contract.confirm_category_next');
// 本人確認書類アップロード
Route::get('regular_contract/upload_identity/{contract_id}', [RegularContractController::class, 'uploadIdentity'])
->name('regular_contract.upload_identity');
// 利用期間選択
Route::get('regular_contract/select_period/{contract_id}', [RegularContractController::class, 'selectPeriod'])
->name('regular_contract.select_period');
// 空き待ち状況確認画面
Route::get('park_waitlist', [ParkWaitlistController::class, 'index'])
->name('park_waitlist.index');
Route::get('/login', function () {
return '
<form method="POST" action="/login">