This commit is contained in:
@ -109,6 +109,48 @@ function qdb_get_program_session(PDO $pdo, string $sessionID): ?array {
|
||||
return $row;
|
||||
}
|
||||
|
||||
/**
|
||||
* sessionNumber (1-based visit index) and orderIndex (0-based sort key) stay in sync:
|
||||
* orderIndex = sessionNumber - 1.
|
||||
*
|
||||
* @param array<string, mixed> $body
|
||||
* @param array<string, mixed>|null $existing
|
||||
* @return array{sessionNumber: int, orderIndex: int}
|
||||
*/
|
||||
function qdb_program_session_resolve_order(PDO $pdo, array $body, ?array $existing = null): array
|
||||
{
|
||||
if (isset($body['sessionNumber'])) {
|
||||
$sessionNumber = max(1, (int)$body['sessionNumber']);
|
||||
return [
|
||||
'sessionNumber' => $sessionNumber,
|
||||
'orderIndex' => $sessionNumber - 1,
|
||||
];
|
||||
}
|
||||
if (isset($body['orderIndex'])) {
|
||||
$orderIndex = max(0, (int)$body['orderIndex']);
|
||||
return [
|
||||
'sessionNumber' => $orderIndex + 1,
|
||||
'orderIndex' => $orderIndex,
|
||||
];
|
||||
}
|
||||
if ($existing !== null) {
|
||||
$sessionNumber = max(1, (int)$existing['sessionNumber']);
|
||||
return [
|
||||
'sessionNumber' => $sessionNumber,
|
||||
'orderIndex' => $sessionNumber - 1,
|
||||
];
|
||||
}
|
||||
|
||||
$maxNum = (int)$pdo->query('SELECT COALESCE(MAX(sessionNumber), 0) FROM program_session')->fetchColumn();
|
||||
$maxOrd = (int)$pdo->query('SELECT COALESCE(MAX(orderIndex), -1) FROM program_session')->fetchColumn();
|
||||
$sessionNumber = max($maxNum, $maxOrd + 1, 0) + 1;
|
||||
|
||||
return [
|
||||
'sessionNumber' => $sessionNumber,
|
||||
'orderIndex' => $sessionNumber - 1,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<array{questionnaireID: string, orderIndex: int}>
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user