diff --git a/app/Http/Controllers/MemberRegistrationController.php b/app/Http/Controllers/MemberRegistrationController.php index e8fbfd6..b166d22 100644 --- a/app/Http/Controllers/MemberRegistrationController.php +++ b/app/Http/Controllers/MemberRegistrationController.php @@ -13,7 +13,7 @@ use Illuminate\Support\Facades\URL; class MemberRegistrationController extends Controller { // 会員登録案内メール送信 - public function sendMail(Request $request) + public function sendMail(Request $request, $management_code) { // バリデーションチェック $rules = ['email' => 'required | email']; @@ -23,7 +23,7 @@ class MemberRegistrationController extends Controller ]; $validator = Validator::make($request->all(), $rules, $message); if ($validator->fails()) { - return redirect('swo2_1') + return redirect("{$management_code}/member_regist") ->withErrors($validator) ->withInput(); } @@ -33,14 +33,14 @@ class MemberRegistrationController extends Controller $existingMember = User::where('user_primemail', $email)->get(); foreach ($existingMember as $member) { if ($member->user_quit_flag != 1) { - return redirect('swo2_1') + return redirect("{$management_code}/member_regist") ->withErrors(['email' => '指定のメールアドレスは既に使用されています。']) ->withInput(); } } // 会員登録用暗号化URL生成(有効期限30分) - $url = URL::temporarySignedRoute('swo2_3', now()->addMinutes(30), ['email' => encrypt($email)]); + $url = URL::temporarySignedRoute('member_regist_input', now()->addMinutes(30), ['management_code' => $management_code, 'email' => encrypt($email)]); // メール送信 Mail::send(["text" => 'emails.member_regist_info'], ['url' => $url], function ($message) use ($email) { @@ -48,35 +48,35 @@ class MemberRegistrationController extends Controller }); // 完了画面遷移 - return view('general.swo2_2'); + return view('general.member_regist_send_mail'); } // メールのURLからアクセス - public function index() + public function index($management_code) { // 署名付きURLの有効期限チェック if (!request()->hasValidSignature()) { - return redirect('error')->withErrors(['error' => '署名の有効期限が切れています']); + return redirect("{$management_code}/error")->withErrors(['error' => '署名の有効期限が切れています']); } // パラメータ存在チェック $encryptedEmail = request()->query('email'); if (!$encryptedEmail) { - return redirect('error')->withErrors(['error' => 'メールアドレスが指定されていません']); + return redirect("{$management_code}/error")->withErrors(['error' => 'メールアドレスが指定されていません']); } // パラメータ整合性チェック try { $email = decrypt($encryptedEmail); } catch (\Exception $e) { - return redirect('error')->withErrors(['error' => 'メールアドレスの情報が不正です']); + return redirect("{$management_code}/error")->withErrors(['error' => 'メールアドレスの情報が不正です']); } // 二重登録防止チェック $existingMember = User::where('user_primemail', $email)->get(); foreach ($existingMember as $member) { if ($member->user_quit_flag != 1) { - return redirect('error')->withErrors(['error' => '既に登録済みです']); + return redirect("{$management_code}/error")->withErrors(['error' => '既に登録済みです']); } } @@ -84,34 +84,71 @@ class MemberRegistrationController extends Controller session(['email' => $email]); // 入力画面に遷移 - return view('general.swo2_3'); + return view('general.member_regist_input', ['management_code' => $management_code]); } // リダイレクト用 - public function indexBack(Request $request) + public function indexBack(Request $request, $management_code) { if (!session('email')) { - return redirect('error')->withErrors(['error' => '不正なアクセスです']); + return redirect("{$management_code}/error")->withErrors(['error' => '不正なアクセスです']); } // 入力画面に遷移 - return view('general.swo2_3'); + return view('general.member_regist_input', ['management_code' => $management_code]); } // 確認画面表示 - public function confirm(Request $request) + public function confirm(Request $request, $management_code) { // 登録完了後のブラウザバックによる二重登録対策 if (!session()->has('email')) { - return redirect('error')->withErrors(['error' => '不正なアクセスです']); + return redirect("{$management_code}/error")->withErrors(['error' => '不正なアクセスです']); } // 入力チェック内容 (メールアドレスはセッションから取得するため対象外) $rules = [ 'name' => 'required', 'kana' => 'required|regex:/^[ァ-ヶー]+$/u', - 'phone.*' => 'required|regex:/^[0-9]+$/', - 'mobile.*' => 'nullable|regex:/^[0-9]+$/', + 'phone' => [ + 'nullable', + function ($attribute, $value, $fail) use ($request) { + $phone = $request->input('phone'); + $mobile = $request->input('mobile'); + + // 電話番号が部分的に入力されている場合はエラー + if (is_array($phone) && !empty(array_filter($phone))) { + $filtered = array_filter($phone); + if (count($filtered) != count($phone)) { + $fail('自宅電話番号は全ての項目を入力してください'); + } + } + }, + ], + 'mobile' => [ + 'nullable', + function ($attribute, $value, $fail) use ($request) { + $phone = $request->input('phone'); + $mobile = $request->input('mobile'); + + // どちらも未入力の場合はエラー + $phoneEmpty = is_array($phone) ? empty(array_filter($phone)) : empty($phone); + $mobileEmpty = is_array($mobile) ? empty(array_filter($mobile)) : empty($mobile); + + if ($phoneEmpty && $mobileEmpty) { + $fail('電話番号はどちらかの入力が必須です'); + } + + // 携帯電話番号が部分的に入力されている場合はエラー + if (is_array($mobile) && !empty(array_filter($mobile))) { + $filtered = array_filter($mobile); + if (count($filtered) != count($mobile)) { + $fail('携帯電話番号は全ての項目を入力してください'); + } + } + }, + ], + 'birthdate' => 'required|date', ]; // エラーメッセージ (メールアドレスはセッションから取得するため対象外) @@ -119,14 +156,14 @@ class MemberRegistrationController extends Controller 'name.required' => '名前を入力してください', 'kana.required' => 'フリガナを入力してください', 'kana.regex' => 'フリガナは全角カタカナで入力してください', - 'phone.*' => '電話番号を正しく入力してください', - 'mobile.*' => '予備電話番号を正しく入力してください', + 'birthdate.required' => '生年月日を入力してください', + 'birthdate.date' => '生年月日を正しく入力してください', ]; // バリデーションチェック $validator = Validator::make($request->all(), $rules, $message); if ($validator->fails()) { - return redirect('swo2_3B')->withErrors($validator)->withInput(); + return redirect("{$management_code}/member_regist_input_back")->withErrors($validator)->withInput(); } // 画面返却値 @@ -135,24 +172,25 @@ class MemberRegistrationController extends Controller "kana" => $request->input('kana'), "phone" => $request->input('phone'), "mobile" => $request->input('mobile'), + "birthdate" => $request->input('birthdate'), "email" => session('email'), ]; // 確認画面に遷移 - return view('general.swo2_4', ['input_data' => $input_data]); + return view('general.member_regist_confirm', ['input_data' => $input_data, 'management_code' => $management_code]); } // 会員登録 or 戻る - public function complete(Request $request) + public function complete(Request $request, $management_code) { // 前の画面に戻る if($request->input('back') == 'back'){ - return redirect('swo2_3B')->withInput(); + return redirect("{$management_code}/member_regist_input_back")->withInput(); } // 登録完了後のブラウザバックによる二重登録対策 if (!session()->has('email')) { - return redirect('error')->withErrors(['error' => '不正なアクセスです']); + return redirect("{$management_code}/error")->withErrors(['error' => '不正なアクセスです']); } // 利用者連番、利用者ID(利用者連番+7DSRチェックデジット)、初期パスワード(ハッシュ化)を生成 @@ -170,8 +208,9 @@ class MemberRegistrationController extends Controller $user->tag_qr_flag = 1; $user->user_name = $request->input('name'); $user->user_phonetic = $request->input('kana'); - $user->user_homephone = implode('-', $request->input('phone')); - $user->user_mobile = implode('-', $request->input('mobile')); + $user->user_homephone = is_array($request->input('phone')) ? implode('-', $request->input('phone')) : $request->input('phone'); + $user->user_mobile = is_array($request->input('mobile')) ? implode('-', $request->input('mobile')) : $request->input('mobile'); + $user->user_birthdate = $request->input('birthdate'); $user->user_primemail = session('email'); $user->user_quit_flag = 0; $user->created_at = now(); @@ -190,6 +229,6 @@ class MemberRegistrationController extends Controller session()->forget('email'); // 完了画面に遷移 - return view('general.swo2_5'); + return view('general.member_regist_complete'); } } \ No newline at end of file diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php new file mode 100644 index 0000000..fb599c6 --- /dev/null +++ b/app/Http/Controllers/NewsController.php @@ -0,0 +1,24 @@ + $news]); + } + + // 前画面から受け取ったニュース情報の詳細を表示 + public function detail(Request $request) + { + return view('general.news', ['date' => $request->date, 'news' => $request->news]); + } +} \ No newline at end of file diff --git a/app/Models/News.php b/app/Models/News.php new file mode 100644 index 0000000..ceba68a --- /dev/null +++ b/app/Models/News.php @@ -0,0 +1,48 @@ + 'integer', + 'open_datetime' => 'datetime', + 'mode' => 'integer', + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'operator_id' => 'integer', + 'management_code' => 'string', + ]; + + /** + * ニュース情報の最新5件を取得 + */ + public static function getNews($management_code) + { + return self::where('management_code', $management_code) + ->whereIn('mode', [2, 3]) + ->where('open_datetime', '<=', now()) + ->orderBy('open_datetime', 'desc') + ->limit(5) + ->get(); + } +} diff --git a/resources/views/general/management_top.blade.php b/resources/views/general/management_top.blade.php new file mode 100644 index 0000000..51b89d7 --- /dev/null +++ b/resources/views/general/management_top.blade.php @@ -0,0 +1,26 @@ +@extends('layouts.general') +@section('content') +
+
+
+

ログインはこちらから

+
+ +
+
+ @include('partials.news') + @include('partials.banner') +@endsection \ No newline at end of file diff --git a/resources/views/general/swo2_1.blade.php b/resources/views/general/member_regist.blade.php similarity index 89% rename from resources/views/general/swo2_1.blade.php rename to resources/views/general/member_regist.blade.php index 6f9a461..e880673 100644 --- a/resources/views/general/swo2_1.blade.php +++ b/resources/views/general/member_regist.blade.php @@ -10,7 +10,7 @@

会員登録ページのご案内をお送りします。お客様のメールアドレスをご入力ください。

-
+
@@ -22,7 +22,7 @@
- 戻る + 戻る
@csrf diff --git a/resources/views/general/swo2_4.blade.php b/resources/views/general/member_regist_confirm.blade.php similarity index 92% rename from resources/views/general/swo2_4.blade.php rename to resources/views/general/member_regist_confirm.blade.php index bdebb7a..5aaf62b 100644 --- a/resources/views/general/swo2_4.blade.php +++ b/resources/views/general/member_regist_confirm.blade.php @@ -11,7 +11,8 @@

入力内容をご確認の上、登録ボタンを押して下さい。

-
+ + @csrf

{{ $input_data['name'] }}

@@ -22,18 +23,18 @@
-
+

{{ implode('-', $input_data['mobile']) }}

+

{{ $input_data['email'] }}

-
+
- @csrf diff --git a/resources/views/general/swo2_3.blade.php b/resources/views/general/member_regist_input.blade.php similarity index 85% rename from resources/views/general/swo2_3.blade.php rename to resources/views/general/member_regist_input.blade.php index d90ae0a..ee774bf 100644 --- a/resources/views/general/swo2_3.blade.php +++ b/resources/views/general/member_regist_input.blade.php @@ -11,7 +11,7 @@

会員情報を入力してください。

-
+
@@ -25,7 +25,7 @@
- +
@@ -37,7 +37,7 @@
- +
@@ -48,24 +48,25 @@
+
+ +
+
+ +
-
- -
-
- -

@if ($errors->has('name')) {{ $errors->first('name') }}
@endif @if ($errors->has('kana')) {{ $errors->first('kana') }}
@endif - @if ($errors->has('phone.*')) {{ $errors->first('phone.*') }}
@endif - @if ($errors->has('mobile.*')) {{ $errors->first('mobile.*') }}
@endif + @if ($errors->has('phone')) {{ $errors->first('phone') }}
@endif + @if ($errors->has('mobile')) {{ $errors->first('mobile') }}
@endif + @if ($errors->has('birthdate')) {{ $errors->first('birthdate') }}
@endif

diff --git a/resources/views/general/swo2_2.blade.php b/resources/views/general/member_regist_send_mail.blade.php similarity index 100% rename from resources/views/general/swo2_2.blade.php rename to resources/views/general/member_regist_send_mail.blade.php diff --git a/resources/views/general/news.blade.php b/resources/views/general/news.blade.php new file mode 100644 index 0000000..fc401d5 --- /dev/null +++ b/resources/views/general/news.blade.php @@ -0,0 +1,16 @@ +@extends('layouts.general') +@section('content') +
+
+
+

{{ $date }}

+
+
+
+

{!! nl2br(e($news)) !!}

+
+
+
+
+@endsection + diff --git a/resources/views/general/swo17_1.blade.php b/resources/views/general/swo17_1.blade.php index 874bc55..ffdf0fa 100644 --- a/resources/views/general/swo17_1.blade.php +++ b/resources/views/general/swo17_1.blade.php @@ -6,22 +6,22 @@
diff --git a/resources/views/general/swo1_1.blade.php b/resources/views/general/swo1_1.blade.php deleted file mode 100644 index 1d8940c..0000000 --- a/resources/views/general/swo1_1.blade.php +++ /dev/null @@ -1,36 +0,0 @@ -@extends('layouts.general') -@section('content') -
-
-
-

So-Managerの駐車場・駐輪場のご利用開始はこちらから

-
- -
-
-@endsection \ No newline at end of file diff --git a/resources/views/general/swo2_5.blade.php b/resources/views/general/swo2_5.blade.php index 124cf92..7d1cffa 100644 --- a/resources/views/general/swo2_5.blade.php +++ b/resources/views/general/swo2_5.blade.php @@ -5,7 +5,7 @@



新規会員登録が完了しました。

- トップページへ戻る>>

+ トップページへ戻る>>

diff --git a/resources/views/general/swo7_1.blade.php b/resources/views/general/swo7_1.blade.php index aa856ba..cccd3c3 100644 --- a/resources/views/general/swo7_1.blade.php +++ b/resources/views/general/swo7_1.blade.php @@ -5,10 +5,10 @@

お問い合わせ

株式会社ソーリンへのご訪問ありがとうございます。 - お問い合わせいただくお客さまは、当社のホームページにおける個人情報の取り扱いについて、あらかじめご確認いただき、ご同意いただいた上でお問い合わせください。個人情報の開示、訂正、削除、利用停止については、こちらをご覧下さい。
+ お問い合わせいただくお客さまは、当社のホームページにおける個人情報の取り扱いについて、あらかじめご確認いただき、ご同意いただいた上でお問い合わせください。個人情報の開示、訂正、削除、利用停止については、こちらをご覧下さい。
また、メールから送信ができないお客様はお手数ですが、下記電話までご連絡をお願い致します。 ※ 携帯・スマートフォンからメールでのお問い合わせの際に、確実にご返信をさせていただくために、ドメイン (so-manager.com) の受信許可設定をお願い致します。

- + @if($errors->any())
- +
@@ -21,8 +21,8 @@ @csrf diff --git a/resources/views/general/swo8_2.blade.php b/resources/views/general/swo8_2.blade.php index 7035d61..0475985 100644 --- a/resources/views/general/swo8_2.blade.php +++ b/resources/views/general/swo8_2.blade.php @@ -8,7 +8,7 @@
パスワードの再設定
-
+
@@ -38,7 +38,7 @@
- 戻る + 戻る
@csrf diff --git a/resources/views/general/swo9_1.blade.php b/resources/views/general/swo9_1.blade.php deleted file mode 100644 index 2c8892c..0000000 --- a/resources/views/general/swo9_1.blade.php +++ /dev/null @@ -1,20 +0,0 @@ -@extends('layouts.general') -@section('content') -
-
-
-

2025.07.16

-
-
-

- 【センターまちや駐輪場をご利用のお客様へ】
- いつもセンターまちや自転車駐車場をご利用いただきましてありがとうございます。
- 7月8日より、ベルトコンベアが故障しておりますが、この度修繕工事が決定しましたのでお知らせいたします。
- 令和7年8月1日(金)9:30から修繕工事を予定しています。
- ご利用者様には大変ご不便をお掛けしておりますが、ご理解頂きますようお願い申し上げます。

-
-
-
-
-@endsection - diff --git a/resources/views/general/swo9_2.blade.php b/resources/views/general/swo9_2.blade.php deleted file mode 100644 index 491bfec..0000000 --- a/resources/views/general/swo9_2.blade.php +++ /dev/null @@ -1,19 +0,0 @@ -@extends('layouts.general') -@section('content') -
-
-
-

2025.04.17

-
-
-

- ※重要※【サーバーメンテナンスによるシステム停止時間について】
- 日頃より当システムをご利用いただき、誠にありがとうございます。
- 2025年4月19日18時~2025年4月20日5時
- 上記時間はサーバーメンテナンスのため、こちらのページはご利用いただけません。
- 不便をお掛けいたしますが、ご理解いただきますようお願い申し上げます。

-
-
-
-
-@endsection diff --git a/resources/views/general/swo9_3.blade.php b/resources/views/general/swo9_3.blade.php deleted file mode 100644 index 79f22b5..0000000 --- a/resources/views/general/swo9_3.blade.php +++ /dev/null @@ -1,16 +0,0 @@ -@extends('layouts.general') -@section('content') -
-
-
-

2025.02.10

-
-
-

- 4月より料金区分が変わる契約者様は手続きが必要です。新しい区分が確認出来る身分証明書をご用意の上サポートセンターまでお問い合わせをお願い致します。So-Managerサポートセンター
- : 03-5856-4720(毎日12時~22時)

-
-
-
-
-@endsection \ No newline at end of file diff --git a/resources/views/general/swo9_4.blade.php b/resources/views/general/swo9_4.blade.php deleted file mode 100644 index 2647c5a..0000000 --- a/resources/views/general/swo9_4.blade.php +++ /dev/null @@ -1,23 +0,0 @@ -@extends('layouts.general') -@section('content') -
-
-
-

2024.12.25

-
-
-

- 十条駅西口自転車駐車場新設のお知らせ。

- 平素は、十条駅西口自転車駐車場(仮設)をご利用いただき、誠にありがとうございます。
- 駐輪場掲示物・係員のお声かけ等で、ご案内させて頂いておりますが、2025年1月9日で
- 当仮設駐輪場は、閉鎖となり駅前ロータリー地下に移転いたします。
- 定期利用料については、2階料金が廃止となります。
- 駐車位置に関しては、優先置場(平置きでラック無し)をご用意しております。
- お手間をお掛け致しますが、ご理解・ご協力の上、よろしくお願い申し上げます。

- 駐輪場営業時間 4:00~翌日1:00
- 1:00~4:00までは、閉場し自転車・人の出入りは出来ません。

-
-
-
-
-@endsection \ No newline at end of file diff --git a/resources/views/general/swo9_5.blade.php b/resources/views/general/swo9_5.blade.php deleted file mode 100644 index e33592a..0000000 --- a/resources/views/general/swo9_5.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@extends('layouts.general') -@section('content') -
-
-
-

2024.12.20

-
-
-

- 亀有西、亀有東自転車駐車場終了のお知らせ
- この度、令和7年3月31日をもって亀有東、亀有西自転車駐車場の管理が、民間(ジェイアール東日本都市開発)の運営に代わることになりました。
- 従いまして、皆様が現状のご契約を継続できる期間は、最大で令和7年3月31日までとなります。令和7年4月以降の手続き等に関しては、新たな管理者となるジェイアール東日本都市開発とご契約するという形になりますが、詳細については令和7年2月頃に発表になります。
- また、令和6年12月の更新期間までは3ヶ月契約が選択できますが、令和7年1月以降は、1ヶ月契約のみとなりますのでご注意ください。

-
-
-
-
-@endsection \ No newline at end of file diff --git a/resources/views/general/top.blade.php b/resources/views/general/top.blade.php new file mode 100644 index 0000000..f16f8a4 --- /dev/null +++ b/resources/views/general/top.blade.php @@ -0,0 +1,26 @@ +@extends('layouts.general_top') +@section('content') +
+
+
+

So-Manager総合トップページ
駐車場・駐輪場のご利用開始はこちらから

+
+
+ +
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/layouts/general.blade.php b/resources/views/layouts/general.blade.php index 0a45d98..433a890 100644 --- a/resources/views/layouts/general.blade.php +++ b/resources/views/layouts/general.blade.php @@ -15,11 +15,9 @@
- @include('partials.header') + @include('partials.general_header') @yield('content') - @include('partials.news') - @include('partials.banner') - @include('partials.footer') + @include('partials.general_footer')
diff --git a/resources/views/layouts/general_top.blade.php b/resources/views/layouts/general_top.blade.php new file mode 100644 index 0000000..249f16a --- /dev/null +++ b/resources/views/layouts/general_top.blade.php @@ -0,0 +1,23 @@ + + + + |So-Manager + + + + + + + + + + + + +
+ @include('partials.general_top_header') + @yield('content') + @include('partials.general_top_footer') +
+ + diff --git a/resources/views/partials/banner.blade.php b/resources/views/partials/banner.blade.php index 845aed9..b0ab8f5 100644 --- a/resources/views/partials/banner.blade.php +++ b/resources/views/partials/banner.blade.php @@ -7,13 +7,13 @@ So-Managerは、株式会社ソーリンがお送りする、駐輪場マネジメントウェブシステムです。
空き駐輪場の検索、予約、駐輪場定期の新規発行、更新がネット上からカンタンに行えます。

- ご利用方法のページへ + ご利用方法のページへ
\ No newline at end of file diff --git a/resources/views/partials/general_footer.blade.php b/resources/views/partials/general_footer.blade.php new file mode 100644 index 0000000..9986e7a --- /dev/null +++ b/resources/views/partials/general_footer.blade.php @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/general_header.blade.php similarity index 53% rename from resources/views/partials/header.blade.php rename to resources/views/partials/general_header.blade.php index 56747d4..8179e2f 100644 --- a/resources/views/partials/header.blade.php +++ b/resources/views/partials/general_header.blade.php @@ -1,30 +1,26 @@ -
@@ -32,10 +28,9 @@