All checks were successful
Deploy preview (main_higashide) / deploy (push) Successful in 11s
173 lines
7.0 KiB
PHP
173 lines
7.0 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Illuminate\Support\Facades\Mail;
|
||
use Illuminate\Support\Facades\Cache;
|
||
use Illuminate\Support\Str;
|
||
|
||
use App\Mail\UserEditVerifyMail;
|
||
|
||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||
use App\Http\Controllers\Controller;
|
||
|
||
class UserEditConfirmController extends Controller
|
||
{
|
||
use ValidatesRequests;
|
||
public function show(Request $request)
|
||
{
|
||
$user_id = session('user_id');
|
||
if (!$user_id) {
|
||
return redirect('/login');
|
||
}
|
||
$user = DB::table('user')->where('user_id', $user_id)->first();
|
||
if (!$user) {
|
||
return redirect('/login');
|
||
}
|
||
|
||
// 直前のPOST値をold()やsession()->get('_old_input')で取得
|
||
$input = session()->get('_old_input', []);
|
||
|
||
\Log::info('ユーザー情報編集確認画面にアクセス', [
|
||
'user_id' => $user_id,
|
||
]);
|
||
|
||
return view('user.confirm', [
|
||
'user' => $user,
|
||
'input' => $input,
|
||
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
|
||
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
|
||
]);
|
||
}
|
||
|
||
// 入力内容確認画面から「変更を確定する」ボタン押下時
|
||
public function submit(Request $request)
|
||
{
|
||
$user_id = session('user_id');
|
||
if (!$user_id) {
|
||
return redirect('/login');
|
||
}
|
||
$user = DB::table('user')->where('user_id', $user_id)->first();
|
||
if (!$user) {
|
||
return redirect('/login');
|
||
}
|
||
|
||
$token = Str::random(64);
|
||
$changeData = $request->except(['_token']);
|
||
$changeData['user_id'] = $user_id;
|
||
$changeData['user_seq'] = $user->user_seq;
|
||
|
||
// 本人確認書類画像アップロード処理
|
||
if ($request->hasFile('photo_filename1') && $request->file('photo_filename1')->isValid()) {
|
||
$file1 = $request->file('photo_filename1');
|
||
$filename1 = uniqid('photo1_') . '.' . $file1->getClientOriginalExtension();
|
||
$file1->storeAs('photo', $filename1, 'public');
|
||
$changeData['photo_filename1'] = $filename1;
|
||
}
|
||
if ($request->hasFile('photo_filename2') && $request->file('photo_filename2')->isValid()) {
|
||
$file2 = $request->file('photo_filename2');
|
||
$filename2 = uniqid('photo2_') . '.' . $file2->getClientOriginalExtension();
|
||
$file2->storeAs('photo', $filename2, 'public');
|
||
$changeData['photo_filename2'] = $filename2;
|
||
}
|
||
|
||
Cache::put('change_request_' . $token, $changeData, now()->addDay());
|
||
|
||
$verifyUrl = route('user.edit.verify', ['token' => $token]);
|
||
|
||
// 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', // マイページメニューの選択状態用
|
||
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
|
||
]);
|
||
}
|
||
|
||
// 認証URLクリック時(変更確定処理)
|
||
public function verify(Request $request)
|
||
{
|
||
$token = $request->query('token');
|
||
$changeData = Cache::get('change_request_' . $token);
|
||
|
||
if (!$changeData) {
|
||
return redirect()->route('user.edit')->withErrors(['register_expired' => '登録期間が過ぎています。もう一度登録してください。']);
|
||
}
|
||
|
||
// 変更内容をDBに保存(userテーブル更新)
|
||
// 更新データ生成(photo_filename1, photo_filename2, user_passは入力時のみ追加)
|
||
$updateData = [
|
||
'user_gender' => $changeData['user_gender'] ?? null,
|
||
'user_regident_zip' => $changeData['user_regident_zip_1'] . $changeData['user_regident_zip_2'],
|
||
'user_regident_pre' => $changeData['user_regident_pre'],
|
||
'user_regident_city' => $changeData['user_regident_city'],
|
||
'user_regident_add' => $changeData['user_regident_add'],
|
||
'user_birthdate' => $changeData['user_birthdate'],
|
||
'user_age' => $changeData['user_age'],
|
||
'user_homephone' => implode('-', $changeData['user_homephone'] ?? []),
|
||
'user_mobile' => implode('-', $changeData['user_mobile'] ?? []),
|
||
'user_primemail' => $changeData['user_primemail'],
|
||
'user_submail' => $changeData['user_submail'],
|
||
// 利用者区分(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,
|
||
'user_relate_zip' => $changeData['user_relate_zip_1'] . $changeData['user_relate_zip_2'],
|
||
'user_relate_pre' => $changeData['user_relate_pre'],
|
||
'user_relate_city' => $changeData['user_relate_city'],
|
||
'user_relate_add' => $changeData['user_relate_add'],
|
||
'updated_at' => now(), //
|
||
];
|
||
if (!empty($changeData['photo_filename1'])) {
|
||
$updateData['photo_filename1'] = $changeData['photo_filename1'];
|
||
}
|
||
if (!empty($changeData['photo_filename2'])) {
|
||
$updateData['photo_filename2'] = $changeData['photo_filename2'];
|
||
}
|
||
if (!empty($changeData['user_pass'])) {
|
||
$updateData['user_pass'] = self::customPasswordHash($changeData['user_pass'], $changeData['user_seq']);
|
||
}
|
||
DB::table('user')
|
||
->where('user_id', $changeData['user_id'])
|
||
->update($updateData);
|
||
|
||
// キャッシュ削除
|
||
Cache::forget('change_request_' . $token);
|
||
|
||
// 完了画面へ(ユーザー情報確認画面にリダイレクトし、成功メッセージ表示)
|
||
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回ストレッチでハッシュ化
|
||
*/
|
||
private static function customPasswordHash($password, $user_seq)
|
||
{
|
||
$salt = $user_seq . 'SOMSALT';
|
||
$hash = hash('sha256', $password);
|
||
$hash .= $salt;
|
||
for ($i = 0; $i < 25; $i++) {
|
||
$hash = hash('sha256', $hash);
|
||
}
|
||
return $hash;
|
||
}
|
||
}
|