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.
68 lines
2.9 KiB
PHP
68 lines
2.9 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../helpers.php';
|
|
runAuth();
|
|
|
|
try {
|
|
$data = readJsonBody();
|
|
$userID = (int) ($data['UserID'] ?? 0);
|
|
if ($userID === 0) apiAbort(['OK' => false, 'ERROR' => 'missing_UserID']);
|
|
|
|
$qTab = queryOne("
|
|
SELECT t.ID, t.UUID, t.BusinessID, t.OwnerUserID, t.ServicePointID,
|
|
t.StatusID, t.AuthAmountCents, t.RunningTotalCents,
|
|
t.OpenedOn, t.LastActivityOn, t.PaymentStatus, t.ApprovalMode,
|
|
b.Name AS BusinessName, b.TabApprovalRequired,
|
|
tm.RoleID,
|
|
sp.Name AS ServicePointName,
|
|
u.FirstName AS OwnerFirstName, u.LastName AS OwnerLastName
|
|
FROM TabMembers tm
|
|
JOIN Tabs t ON t.ID = tm.TabID
|
|
JOIN Businesses b ON b.ID = t.BusinessID
|
|
LEFT JOIN ServicePoints sp ON sp.ID = t.ServicePointID
|
|
JOIN Users u ON u.ID = t.OwnerUserID
|
|
WHERE tm.UserID = ? AND tm.StatusID = 1 AND t.StatusID = 1
|
|
LIMIT 1
|
|
", [$userID]);
|
|
|
|
if (!$qTab) jsonResponse(['OK' => true, 'HAS_TAB' => false]);
|
|
|
|
$qMembers = queryOne("SELECT COUNT(*) AS MemberCount FROM TabMembers WHERE TabID = ? AND StatusID = 1", [$qTab['ID']]);
|
|
|
|
$pendingCount = 0;
|
|
if ((int) $qTab['RoleID'] === 1) {
|
|
$qPending = queryOne("SELECT COUNT(*) AS PendingCount FROM TabOrders WHERE TabID = ? AND ApprovalStatus = 'pending'", [$qTab['ID']]);
|
|
$pendingCount = (int) $qPending['PendingCount'];
|
|
}
|
|
|
|
$approvalMode = $qTab['ApprovalMode'] ?? '';
|
|
$approvalRequired = (is_numeric($approvalMode) && $approvalMode !== '')
|
|
? (int) $approvalMode === 1
|
|
: (int) ($qTab['TabApprovalRequired'] ?? 0) === 1;
|
|
|
|
jsonResponse([
|
|
'OK' => true,
|
|
'HAS_TAB' => true,
|
|
'TAB' => [
|
|
'ID' => (int) $qTab['ID'],
|
|
'UUID' => $qTab['UUID'],
|
|
'BusinessID' => (int) $qTab['BusinessID'],
|
|
'BusinessName' => $qTab['BusinessName'],
|
|
'OwnerUserID' => (int) $qTab['OwnerUserID'],
|
|
'OwnerName' => $qTab['OwnerFirstName'] . ' ' . $qTab['OwnerLastName'],
|
|
'ServicePointID' => (int) ($qTab['ServicePointID'] ?? 0),
|
|
'ServicePointName' => $qTab['ServicePointName'] ?? '',
|
|
'StatusID' => (int) $qTab['StatusID'],
|
|
'AuthAmountCents' => (int) $qTab['AuthAmountCents'],
|
|
'RunningTotalCents' => (int) $qTab['RunningTotalCents'],
|
|
'RemainingCents' => (int) $qTab['AuthAmountCents'] - (int) $qTab['RunningTotalCents'],
|
|
'OpenedOn' => toISO8601($qTab['OpenedOn']),
|
|
'MemberCount' => (int) $qMembers['MemberCount'],
|
|
'PendingOrderCount' => $pendingCount,
|
|
'IsOwner' => (int) $qTab['RoleID'] === 1,
|
|
'ApprovalRequired' => $approvalRequired,
|
|
],
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
jsonResponse(['OK' => false, 'ERROR' => 'server_error', 'MESSAGE' => $e->getMessage()]);
|
|
}
|