payfrit-api/api/servicepoints/save.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

93 lines
3.1 KiB
PHP

<?php
require_once __DIR__ . '/../helpers.php';
runAuth();
global $businessId;
$data = readJsonBody();
if ($businessId <= 0) {
apiAbort(['OK' => false, 'ERROR' => 'no_business_selected']);
}
$spName = trim($data['Name'] ?? '');
if ($spName === '') {
apiAbort(['OK' => false, 'ERROR' => 'missing_name', 'MESSAGE' => 'Name is required']);
}
$servicePointId = (int) ($data['ServicePointID'] ?? 0);
$spCode = trim($data['Code'] ?? '');
$spTypeID = (int) ($data['TypeID'] ?? 1);
$sortOrder = (int) ($data['SortOrder'] ?? 0);
$beaconMinor = isset($data['BeaconMinor']) && is_numeric($data['BeaconMinor']) ? (int) $data['BeaconMinor'] : -1;
$isActive = 1;
if (isset($data['IsActive'])) {
$v = $data['IsActive'];
if (is_bool($v)) $isActive = $v ? 1 : 0;
elseif (is_numeric($v)) $isActive = (int) $v;
elseif (is_string($v)) $isActive = (strtolower(trim($v)) === 'true') ? 1 : 0;
}
try {
if ($servicePointId > 0) {
// Update
$sql = "UPDATE ServicePoints SET Name = ?, Code = ?, TypeID = ?, IsActive = ?, SortOrder = ?";
$params = [$spName, $spCode ?: null, $spTypeID, $isActive, $sortOrder];
if ($beaconMinor >= 0) {
$sql .= ", BeaconMinor = ?";
$params[] = $beaconMinor;
}
$sql .= " WHERE ID = ? AND BusinessID = ?";
$params[] = $servicePointId;
$params[] = $businessId;
queryTimed($sql, $params);
$qCheck = queryOne("SELECT ID FROM ServicePoints WHERE ID = ? AND BusinessID = ? LIMIT 1",
[$servicePointId, $businessId]);
if (!$qCheck) {
apiAbort(['OK' => false, 'ERROR' => 'not_found']);
}
} else {
// Auto-allocate BeaconMinor if not provided
if ($beaconMinor < 0) {
$qMaxMinor = queryOne("
SELECT COALESCE(MAX(BeaconMinor), -1) AS MaxMinor FROM ServicePoints WHERE BusinessID = ?
", [$businessId]);
$beaconMinor = (int) $qMaxMinor['MaxMinor'] + 1;
}
queryTimed("
INSERT INTO ServicePoints (BusinessID, Name, Code, TypeID, IsActive, SortOrder, BeaconMinor)
VALUES (?, ?, ?, ?, ?, ?, ?)
", [$businessId, $spName, $spCode ?: null, $spTypeID, $isActive, $sortOrder, $beaconMinor]);
$servicePointId = (int) lastInsertId();
}
$qOut = queryOne("
SELECT ID, BusinessID, Name, Code, TypeID, IsActive, SortOrder, BeaconMinor
FROM ServicePoints WHERE ID = ? AND BusinessID = ? LIMIT 1
", [$servicePointId, $businessId]);
jsonResponse([
'OK' => true,
'ERROR' => '',
'SERVICEPOINT' => [
'ServicePointID' => (int) $qOut['ID'],
'BusinessID' => (int) $qOut['BusinessID'],
'Name' => $qOut['Name'],
'Code' => $qOut['Code'] ?? '',
'TypeID' => (int) $qOut['TypeID'],
'IsActive' => (int) $qOut['IsActive'],
'SortOrder' => (int) $qOut['SortOrder'],
'BeaconMinor' => $qOut['BeaconMinor'] !== null ? (int) $qOut['BeaconMinor'] : '',
],
]);
} catch (Exception $e) {
jsonResponse(['OK' => false, 'ERROR' => 'server_error', 'MESSAGE' => $e->getMessage()]);
}