getUserDetails((int) $_SESSION['user_id']); } catch (Exception $e) { set_message('Unable to load your profile right now. Please try again later.', 'danger'); header('Location: index.php'); exit(); } if (!$userDetails) { set_message('We could not find your account record. Contact support.', 'danger'); header('Location: index.php'); exit(); } $personId = (int) $userDetails['fkisp_id_of']; $role = $_SESSION['user_status'] ?? ''; $layoutMap = [ 'DAC Staff' => [ 'header' => 'includes/header_admin.php', 'nav' => 'includes/nav_admin.php', 'footer' => 'includes/footer_admin.php', 'dashboard' => 'admin/dashboard.php', 'badge' => 'bg-danger', ], 'Data Owner' => [ 'header' => 'includes/header_owner.php', 'nav' => 'includes/nav_owner.php', 'footer' => 'includes/footer_owner.php', 'dashboard' => 'data_owner/dashboard.php', 'badge' => 'bg-info', ], 'Data Contributor' => [ 'header' => 'includes/header_contributor.php', 'nav' => 'includes/nav_contributor.php', 'footer' => 'includes/footer_contributor.php', 'dashboard' => 'data_hybrid/dashboard.php', 'badge' => 'bg-primary', ], 'Data User' => [ 'header' => 'includes/header_user.php', 'nav' => 'includes/nav_user.php', 'footer' => 'includes/footer_user.php', 'dashboard' => 'data_user/dashboard.php', 'badge' => 'bg-success', ], ]; $layout = $layoutMap[$role] ?? $layoutMap['Data User']; $sexOptions = ['Male', 'Female', 'Other']; $maritalOptions = ['Single', 'Married', 'Divorced', 'Widowed']; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $payload = [ 'isp_firstname_en' => trim($_POST['isp_firstname_en'] ?? ''), 'isp_lastname_en' => trim($_POST['isp_lastname_en'] ?? ''), 'isp_sex' => trim($_POST['isp_sex'] ?? ''), 'isp_dob' => trim($_POST['isp_dob'] ?? ''), 'isp_pob' => trim($_POST['isp_pob'] ?? ''), 'isp_nationality' => trim($_POST['isp_nationality'] ?? ''), 'isp_marital_status' => trim($_POST['isp_marital_status'] ?? ''), 'isp_phone_number' => trim($_POST['isp_phone_number'] ?? ''), 'isp_email' => trim($_POST['isp_email'] ?? ''), 'isp_telegram' => trim($_POST['isp_telegram'] ?? ''), 'isp_note' => trim($_POST['isp_note'] ?? ''), ]; if ($payload['isp_firstname_en'] === '' || $payload['isp_lastname_en'] === '') { $errors[] = 'First name and last name are required.'; } if ($payload['isp_sex'] === '' || !in_array($payload['isp_sex'], $sexOptions, true)) { $errors[] = 'Please select a valid gender.'; } if ($payload['isp_dob'] === '') { $errors[] = 'Date of birth is required.'; } if ($payload['isp_marital_status'] !== '' && !in_array($payload['isp_marital_status'], $maritalOptions, true)) { $errors[] = 'Please select a valid marital status.'; } if ($payload['isp_email'] !== '' && !filter_var($payload['isp_email'], FILTER_VALIDATE_EMAIL)) { $errors[] = 'Please provide a valid email address.'; } if (empty($errors)) { try { $userManager->updatePersonInfo($personId, $payload, (int) $_SESSION['user_id']); set_message('Your profile was updated successfully.', 'success'); header('Location: profile.php'); exit(); } catch (Exception $e) { $errors[] = $e->getMessage(); } } $userDetails = array_merge($userDetails, $payload); } $lastUpdated = $userDetails['isp_mod_datetime'] ?? $userDetails['isp_reg_datetime'] ?? null; $displayLastUpdated = $lastUpdated ? date('M j, Y', strtotime($lastUpdated)) : 'Unknown'; $dashboardLink = $layout['dashboard']; ?>
Accurate contact and identity details help the Data Access Committee approve requests quickly and keep audit logs clean.