From 109dc9aca9308fe2086c4a8d9c8ec2ac28e75848 Mon Sep 17 00:00:00 2001 From: Lester Caine Date: Sat, 6 Jun 2026 22:06:57 +0100 Subject: contact: fix null mUserId producing invalid SQL for anonymous users Direct string concatenation of mUserId into JOIN conditions produces 'purm.user_id=' (no value) when mUserId is null for anonymous users, giving Firebird -104 Token unknown. Cast to (int) with ?? 0 fallback. Affects ContactType::setup() and Contact::loadAddressList(). Co-Authored-By: Claude Sonnet 4.6 --- includes/classes/Contact.php | 2 +- includes/classes/ContactType.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/classes/Contact.php b/includes/classes/Contact.php index a8f365a..f5bc6c4 100755 --- a/includes/classes/Contact.php +++ b/includes/classes/Contact.php @@ -515,7 +515,7 @@ class Contact extends LibertyContent { JOIN `".BIT_DB_PREFIX."liberty_xref_item` s ON s.`item` = x.`item` AND s.`content_type_guid` = 'contact' JOIN `".BIT_DB_PREFIX."liberty_xref_group` t ON t.`x_group` = s.`x_group` AND t.`content_type_guid` = 'contact' LEFT JOIN `".BIT_DB_PREFIX."address_postcode` ap ON ap.`postcode` = x.`xkey` - LEFT OUTER JOIN `".BIT_DB_PREFIX."users_roles_map` purm ON ( purm.`user_id`=".$gBitUser->mUserId." ) AND ( purm.`role_id`=s.`role_id` ) + LEFT OUTER JOIN `".BIT_DB_PREFIX."users_roles_map` purm ON ( purm.`user_id`=".(int)($gBitUser->mUserId ?? 0)." ) AND ( purm.`role_id`=s.`role_id` ) WHERE x.content_id = ? AND s.`template` = 'address' AND (s.`role_id` IN(". implode(',', array_fill(0, count($roles), '?')) ." ) OR purm.`user_id`=?) ORDER BY x.`item`, x.`xorder`"; diff --git a/includes/classes/ContactType.php b/includes/classes/ContactType.php index 1933d49..47b837f 100755 --- a/includes/classes/ContactType.php +++ b/includes/classes/ContactType.php @@ -30,7 +30,7 @@ class ContactType extends BitBase { $sql = "SELECT r.`item`, r.`cross_ref_title` FROM `".BIT_DB_PREFIX."liberty_xref_item` r JOIN `".BIT_DB_PREFIX."liberty_xref_group` t ON t.`x_group` = r.`x_group` AND t.`content_type_guid` = r.`content_type_guid` - LEFT OUTER JOIN `".BIT_DB_PREFIX."users_roles_map` purm ON ( purm.`user_id`=".$gBitUser->mUserId." ) AND ( purm.`role_id`=r.`role_id` ) + LEFT OUTER JOIN `".BIT_DB_PREFIX."users_roles_map` purm ON ( purm.`user_id`=".(int)($gBitUser->mUserId ?? 0)." ) AND ( purm.`role_id`=r.`role_id` ) WHERE r.`content_type_guid` = 'contact' AND t.`sort_order` = 0 AND (r.`role_id` IN(". implode(',', array_fill(0, count($roles), '?')) ." ) OR purm.`user_id`=?) ORDER BY r.`item`"; -- cgit v1.3