Files
usher-manage-stack/app/Http/Controllers/MemberDashboardController.php
Gbanyan 6890cf085d Fix 'My Membership' 404 by adding missing profile flow
- Added a 'Create Member Profile' page for existing users who don't have a member record.
- Updated MemberDashboardController to redirect to profile creation instead of aborting 404.
- Added 'member.profile.create' and 'member.profile.store' routes.
2025-11-28 00:25:04 +08:00

91 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Member;
use App\Support\AuditLogger;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class MemberDashboardController extends Controller
{
public function show(Request $request)
{
$user = $request->user();
$member = $user->member;
if (! $member) {
return redirect()->route('member.profile.create');
}
$member->load([
'payments.submittedBy',
'payments.verifiedByCashier',
'payments.verifiedByAccountant',
'payments.verifiedByChair',
'payments.rejectedBy'
]);
$pendingPayment = $member->getPendingPayment();
return view('member.dashboard', [
'member' => $member,
'payments' => $member->payments()->latest('paid_at')->get(),
'pendingPayment' => $pendingPayment,
]);
}
public function createProfile()
{
$user = Auth::user();
if ($user->member) {
return redirect()->route('member.dashboard');
}
return view('member.create-profile');
}
public function storeProfile(Request $request)
{
$user = Auth::user();
if ($user->member) {
return redirect()->route('member.dashboard');
}
$validated = $request->validate([
'full_name' => ['required', 'string', 'max:255'],
'phone' => ['nullable', 'string', 'max:20'],
'national_id' => ['nullable', 'string', 'max:20'],
'address_line_1' => ['nullable', 'string', 'max:255'],
'address_line_2' => ['nullable', 'string', 'max:255'],
'city' => ['nullable', 'string', 'max:100'],
'postal_code' => ['nullable', 'string', 'max:10'],
'emergency_contact_name' => ['nullable', 'string', 'max:255'],
'emergency_contact_phone' => ['nullable', 'string', 'max:20'],
'terms_accepted' => ['required', 'accepted'],
]);
$member = Member::create([
'user_id' => $user->id,
'full_name' => $validated['full_name'],
'email' => $user->email,
'phone' => $validated['phone'] ?? null,
'national_id' => $validated['national_id'] ?? null,
'address_line_1' => $validated['address_line_1'] ?? null,
'address_line_2' => $validated['address_line_2'] ?? null,
'city' => $validated['city'] ?? null,
'postal_code' => $validated['postal_code'] ?? null,
'emergency_contact_name' => $validated['emergency_contact_name'] ?? null,
'emergency_contact_phone' => $validated['emergency_contact_phone'] ?? null,
'membership_status' => Member::STATUS_PENDING,
'membership_type' => Member::TYPE_REGULAR,
]);
AuditLogger::log('member.created_profile', $member, [
'user_id' => $user->id,
'name' => $member->full_name,
]);
return redirect()->route('member.dashboard')
->with('status', __('Profile completed! Please submit your membership payment.'));
}
}