payfrit-api/api/beacons/getBusinessFromBeacon.php
John Mizerek 1f81d98c52 Initial PHP API migration from CFML
Complete port of all 163 API endpoints from Lucee/CFML to PHP 8.3.
Shared helpers in api/helpers.php (DB, auth, request/response, security).
PDO prepared statements throughout. Same JSON response shapes as CFML.
2026-03-14 14:26:59 -07:00

116 lines
3.6 KiB
PHP

<?php
require_once __DIR__ . '/../helpers.php';
runAuth();
$data = readJsonBody();
$beaconId = (int) ($data['BeaconID'] ?? 0);
if ($beaconId <= 0) {
apiAbort(['OK' => false, 'ERROR' => 'missing_beacon_id', 'MESSAGE' => 'BeaconID is required']);
}
$qBeacon = queryOne("
SELECT ID, Name, UUID, BusinessID FROM Beacons
WHERE ID = ? AND IsActive = 1 LIMIT 1
", [$beaconId]);
if (!$qBeacon) {
apiAbort(['OK' => false, 'ERROR' => 'not_found', 'MESSAGE' => 'Beacon not found or inactive']);
}
// Get businesses assigned to this beacon (via service points or join table)
$qAssignments = queryTimed("
SELECT sp.BusinessID, sp.ID AS ServicePointID, biz.Name AS BusinessName,
biz.ParentBusinessID, sp.Name AS ServicePointName
FROM ServicePoints sp
INNER JOIN Businesses biz ON biz.ID = sp.BusinessID
WHERE sp.BeaconID = ? AND sp.IsActive = 1
UNION
SELECT lt.BusinessID, 0 AS ServicePointID, biz.Name AS BusinessName,
biz.ParentBusinessID, '' AS ServicePointName
FROM lt_BeaconsID_BusinessesID lt
INNER JOIN Businesses biz ON biz.ID = lt.BusinessID
WHERE lt.BeaconID = ?
AND lt.BusinessID NOT IN (
SELECT sp2.BusinessID FROM ServicePoints sp2
WHERE sp2.BeaconID = ? AND sp2.IsActive = 1
)
ORDER BY ParentBusinessID IS NULL DESC, BusinessName ASC
", [$beaconId, $beaconId, $beaconId]);
// Check if any assigned business is a parent
$parentBusinessID = 0;
foreach ($qAssignments as $a) {
$childCount = queryOne("
SELECT COUNT(*) AS cnt FROM Businesses WHERE ParentBusinessID = ?
", [(int) $a['BusinessID']]);
if ($childCount && (int) $childCount['cnt'] > 0) {
$parentBusinessID = (int) $a['BusinessID'];
break;
}
}
$businesses = [];
if ($parentBusinessID > 0) {
$qParent = queryOne("
SELECT Name, HeaderImageExtension FROM Businesses WHERE ID = ?
", [$parentBusinessID]);
$qChildren = queryTimed("
SELECT ID, Name, ParentBusinessID, HeaderImageExtension
FROM Businesses WHERE ParentBusinessID = ? ORDER BY Name ASC
", [$parentBusinessID]);
$firstAssignment = $qAssignments[0] ?? [];
foreach ($qChildren as $child) {
$businesses[] = [
'BusinessID' => (int) $child['ID'],
'Name' => $child['Name'],
'ServicePointID' => (int) ($firstAssignment['ServicePointID'] ?? 0),
'ServicePointName' => $firstAssignment['ServicePointName'] ?? '',
'IsParent' => false,
'ParentBusinessID' => $parentBusinessID,
];
}
} else {
foreach ($qAssignments as $a) {
$businesses[] = [
'BusinessID' => (int) $a['BusinessID'],
'Name' => $a['BusinessName'],
'ServicePointID' => (int) $a['ServicePointID'],
'ServicePointName' => $a['ServicePointName'],
'IsParent' => empty($a['ParentBusinessID']) || (int) $a['ParentBusinessID'] === 0,
];
}
}
$response = [
'OK' => true,
'ERROR' => '',
'BEACON' => [
'BeaconID' => (int) $qBeacon['ID'],
'Name' => $qBeacon['Name'],
'UUID' => $qBeacon['UUID'],
],
'BUSINESSES' => $businesses,
'BUSINESS' => $businesses[0] ?? (object) [],
'SERVICEPOINT' => !empty($businesses) ? [
'ServicePointID' => $businesses[0]['ServicePointID'],
'Name' => $businesses[0]['ServicePointName'],
'IsActive' => true,
] : (object) [],
];
if ($parentBusinessID > 0) {
$response['PARENT'] = [
'BusinessID' => $parentBusinessID,
'Name' => $qParent['Name'] ?? '',
'HeaderImageExtension' => trim($qParent['HeaderImageExtension'] ?? ''),
];
}
jsonResponse($response);