$maxChars) { dbnToolsError("Field {$key} is too long.", 422, 'field_too_long'); } return $value; } $displayName = profileString($input, 'display_name', 100, $currentProfile); $phone = profileString($input, 'phone', 40, $currentProfile); $addressLine1 = profileString($input, 'address_line1', 180, $currentProfile); $addressLine2 = profileString($input, 'address_line2', 180, $currentProfile); $postalCode = profileString($input, 'postal_code', 32, $currentProfile); $city = profileString($input, 'city', 100, $currentProfile); $addressRegion = profileString($input, 'address_region', 100, $currentProfile); $country = strtoupper(profileString($input, 'country', 2, $currentProfile)); $preferredLanguage = dbnToolsNormalizeUiLanguage($input['preferred_language'] ?? ($_SESSION['lang'] ?? 'en')); $dismissPrompt = !empty($input['dismiss_prompt']); try { $db = dbnmDb(); $stmt = $db->prepare( 'UPDATE users SET display_name = NULLIF(?, ""), phone = NULLIF(?, ""), address_line1 = NULLIF(?, ""), address_line2 = NULLIF(?, ""), postal_code = NULLIF(?, ""), city = NULLIF(?, ""), address_region = NULLIF(?, ""), country = NULLIF(?, ""), preferred_language = ?, profile_prompt_dismissed_at = CASE WHEN ? = 1 THEN COALESCE(profile_prompt_dismissed_at, NOW()) ELSE profile_prompt_dismissed_at END WHERE id = ?' ); $stmt->execute([ $displayName, $phone, $addressLine1, $addressLine2, $postalCode, $city, $addressRegion, $country, $preferredLanguage, $dismissPrompt ? 1 : 0, $userId, ]); if ($displayName !== '') { $_SESSION['dbn_tools_user_name'] = $displayName; $_SESSION['dbn_tools_sso_name'] = $displayName; } $_SESSION['lang'] = $preferredLanguage; dbnToolsRespond([ 'ok' => true, 'profile' => dbnToolsMainUserProfile($userId), ]); } catch (Throwable $e) { error_log('[profile] ' . $e->getMessage()); dbnToolsError('Could not save profile details.', 500, 'profile_save_failed'); }