payfrit-api/api/grants/get.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

96 lines
3.2 KiB
PHP

<?php
require_once __DIR__ . '/../helpers.php';
runAuth();
global $userId;
$data = readJsonBody();
$grantID = (int) ($data['GrantID'] ?? 0);
if ($grantID <= 0) {
apiAbort(['OK' => false, 'ERROR' => 'missing_grantid', 'MESSAGE' => 'GrantID is required.']);
}
if ($userId <= 0) {
apiAbort(['OK' => false, 'ERROR' => 'not_authenticated']);
}
$qGrant = queryOne(
"SELECT
g.*,
ob.Name AS OwnerBusinessName,
gb.Name AS GuestBusinessName,
sp.Name AS ServicePointName,
sp.TypeID AS ServicePointTypeID,
cu.FirstName AS CreatedByFirstName,
cu.LastName AS CreatedByLastName,
au.FirstName AS AcceptedByFirstName,
au.LastName AS AcceptedByLastName
FROM ServicePointGrants g
JOIN Businesses ob ON ob.ID = g.OwnerBusinessID
JOIN Businesses gb ON gb.ID = g.GuestBusinessID
JOIN ServicePoints sp ON sp.ID = g.ServicePointID
LEFT JOIN Users cu ON cu.ID = g.CreatedByUserID
LEFT JOIN Users au ON au.ID = g.AcceptedByUserID
WHERE g.ID = ?
LIMIT 1",
[$grantID]
);
if (!$qGrant) {
apiAbort(['OK' => false, 'ERROR' => 'not_found', 'MESSAGE' => 'Grant not found.']);
}
// Load history
$historyRows = queryTimed(
"SELECT h.*, u.FirstName, u.LastName
FROM ServicePointGrantHistory h
LEFT JOIN Users u ON u.ID = h.ActorUserID
WHERE h.GrantID = ?
ORDER BY h.CreatedOn DESC",
[$grantID]
);
$history = [];
foreach ($historyRows as $row) {
$history[] = [
'ID' => (int) $row['ID'],
'Action' => $row['Action'],
'ActorUserID' => (int) $row['ActorUserID'],
'ActorName' => trim(($row['FirstName'] ?? '') . ' ' . ($row['LastName'] ?? '')),
'ActorBusinessID' => (int) $row['ActorBusinessID'],
'PreviousData' => $row['PreviousData'] ?? '',
'NewData' => $row['NewData'] ?? '',
'CreatedOn' => $row['CreatedOn'],
];
}
$grant = [
'GrantID' => (int) $qGrant['ID'],
'UUID' => $qGrant['UUID'],
'OwnerBusinessID' => (int) $qGrant['OwnerBusinessID'],
'GuestBusinessID' => (int) $qGrant['GuestBusinessID'],
'ServicePointID' => (int) $qGrant['ServicePointID'],
'StatusID' => (int) $qGrant['StatusID'],
'EconomicsType' => $qGrant['EconomicsType'],
'EconomicsValue' => (float) $qGrant['EconomicsValue'],
'EligibilityScope' => $qGrant['EligibilityScope'],
'TimePolicyType' => $qGrant['TimePolicyType'],
'TimePolicyData' => $qGrant['TimePolicyData'] ?? '',
'CreatedOn' => $qGrant['CreatedOn'],
'AcceptedOn' => $qGrant['AcceptedOn'] ?? '',
'RevokedOn' => $qGrant['RevokedOn'] ?? '',
'LastEditedOn' => $qGrant['LastEditedOn'],
'OwnerBusinessName' => $qGrant['OwnerBusinessName'],
'GuestBusinessName' => $qGrant['GuestBusinessName'],
'ServicePointName' => $qGrant['ServicePointName'],
'ServicePointTypeID' => (int) $qGrant['ServicePointTypeID'],
'CreatedByName' => trim(($qGrant['CreatedByFirstName'] ?? '') . ' ' . ($qGrant['CreatedByLastName'] ?? '')),
'AcceptedByName' => trim(($qGrant['AcceptedByFirstName'] ?? '') . ' ' . ($qGrant['AcceptedByLastName'] ?? '')),
];
jsonResponse([
'OK' => true,
'Grant' => $grant,
'History' => $history,
]);