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.
59 lines
1.9 KiB
PHP
59 lines
1.9 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../helpers.php';
|
|
runAuth();
|
|
|
|
/**
|
|
* List businesses where user is an active employee
|
|
* POST: { UserID: int }
|
|
*/
|
|
|
|
$data = readJsonBody();
|
|
$userID = (int) ($data['UserID'] ?? 0);
|
|
|
|
if ($userID <= 0) {
|
|
apiAbort(['OK' => false, 'ERROR' => 'missing_params', 'MESSAGE' => 'UserID is required.']);
|
|
}
|
|
|
|
try {
|
|
$qBusinesses = queryTimed("
|
|
SELECT
|
|
MIN(e.ID) AS EmployeeID,
|
|
e.BusinessID,
|
|
MIN(e.StatusID) AS StatusID,
|
|
MAX(e.IsActive) AS IsActive,
|
|
MAX(COALESCE(e.RoleID, 1)) AS RoleID,
|
|
b.Name AS Name,
|
|
(SELECT COUNT(*) FROM Tasks t WHERE t.BusinessID = e.BusinessID AND t.ClaimedByUserID = 0 AND t.CompletedOn IS NULL) AS PendingTaskCount,
|
|
(SELECT COUNT(*) FROM Tasks t WHERE t.BusinessID = e.BusinessID AND t.ClaimedByUserID = ? AND t.CompletedOn IS NULL) AS ActiveTaskCount
|
|
FROM Employees e
|
|
INNER JOIN Businesses b ON b.ID = e.BusinessID
|
|
WHERE e.UserID = ? AND e.IsActive = 1
|
|
GROUP BY e.BusinessID, b.Name
|
|
ORDER BY b.Name ASC
|
|
", [$userID, $userID]);
|
|
|
|
$businesses = [];
|
|
foreach ($qBusinesses as $row) {
|
|
$businesses[] = [
|
|
'EmployeeID' => (int) $row['EmployeeID'],
|
|
'BusinessID' => (int) $row['BusinessID'],
|
|
'Name' => $row['Name'],
|
|
'Address' => '',
|
|
'City' => '',
|
|
'StatusID' => (int) $row['StatusID'],
|
|
'RoleID' => (int) $row['RoleID'],
|
|
'PendingTaskCount' => (int) $row['PendingTaskCount'],
|
|
'ActiveTaskCount' => (int) $row['ActiveTaskCount'],
|
|
];
|
|
}
|
|
|
|
jsonResponse([
|
|
'OK' => true,
|
|
'ERROR' => '',
|
|
'BUSINESSES' => $businesses,
|
|
'COUNT' => count($businesses),
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
jsonResponse(['OK' => false, 'ERROR' => 'server_error', 'MESSAGE' => 'Error loading businesses', 'DETAIL' => $e->getMessage()]);
|
|
}
|