This commit is contained in:
@ -514,11 +514,13 @@ if ($fetchClients) {
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../lib/program_sessions.php';
|
||||
require_once __DIR__ . '/../lib/session_schedule.php';
|
||||
$clients = array_map(function ($code) use ($completions, $pdo) {
|
||||
return [
|
||||
'clientCode' => $code,
|
||||
'completedQuestionnaires' => $completions[$code] ?? [],
|
||||
'programProgress' => qdb_client_program_progress($pdo, $code),
|
||||
'nextSessionSchedule' => qdb_get_client_session_schedule($pdo, $code),
|
||||
];
|
||||
}, $clientCodes);
|
||||
|
||||
|
||||
56
handlers/app_session_schedule.php
Normal file
56
handlers/app_session_schedule.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
$tokenRec = require_valid_token();
|
||||
|
||||
if ($method !== 'POST') {
|
||||
json_error('METHOD_NOT_ALLOWED', 'Method not allowed', 405);
|
||||
}
|
||||
|
||||
$body = read_json_body();
|
||||
require_fields($body, ['clientCode', 'scheduledDate', 'programCycleNumber', 'programSessionNumber']);
|
||||
|
||||
$clientCode = trim((string)$body['clientCode']);
|
||||
$scheduledDate = trim((string)$body['scheduledDate']);
|
||||
$programCycleNumber = max(1, (int)$body['programCycleNumber']);
|
||||
$programSessionNumber = max(1, (int)$body['programSessionNumber']);
|
||||
$programSessionID = isset($body['programSessionID'])
|
||||
? trim((string)$body['programSessionID'])
|
||||
: null;
|
||||
if ($programSessionID === '') {
|
||||
$programSessionID = null;
|
||||
}
|
||||
|
||||
try {
|
||||
$opened = qdb_open_write_or_fail();
|
||||
[$pdo, $tmpDb, $lockFp] = $opened;
|
||||
|
||||
require_role(['coach'], $tokenRec);
|
||||
[$rbacClause, $rbacParams] = rbac_client_filter($tokenRec, 'cl');
|
||||
$clStmt = $pdo->prepare(
|
||||
"SELECT cl.clientCode FROM client cl WHERE cl.clientCode = :cc AND ($rbacClause)"
|
||||
);
|
||||
$clStmt->execute(array_merge([':cc' => $clientCode], $rbacParams));
|
||||
if (!$clStmt->fetch()) {
|
||||
qdb_discard($tmpDb, $lockFp);
|
||||
json_error('NOT_FOUND', 'Client not found or not authorized', 404);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../lib/session_schedule.php';
|
||||
qdb_upsert_client_session_schedule(
|
||||
$pdo,
|
||||
$clientCode,
|
||||
$scheduledDate,
|
||||
$programCycleNumber,
|
||||
$programSessionNumber,
|
||||
$programSessionID
|
||||
);
|
||||
|
||||
qdb_save($tmpDb, $lockFp);
|
||||
|
||||
json_success([
|
||||
'scheduled' => true,
|
||||
'schedule' => qdb_get_client_session_schedule($pdo, $clientCode),
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
qdb_handler_fail($e, 'Save session schedule', null, $tmpDb ?? null, $lockFp ?? null);
|
||||
}
|
||||
@ -19,7 +19,14 @@ case 'GET':
|
||||
INNER JOIN client cl ON cl.clientCode = cq.clientCode
|
||||
WHERE cq.questionnaireID = q.questionnaireID
|
||||
AND $rbacClause
|
||||
) AS completedCount
|
||||
) AS completedCount,
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM questionnaire_submission qs
|
||||
INNER JOIN client cl ON cl.clientCode = qs.clientCode
|
||||
WHERE qs.questionnaireID = q.questionnaireID
|
||||
AND $rbacClause
|
||||
) AS submissionCount
|
||||
FROM questionnaire q
|
||||
LEFT JOIN question qu ON qu.questionnaireID = q.questionnaireID
|
||||
GROUP BY q.questionnaireID
|
||||
@ -33,6 +40,7 @@ case 'GET':
|
||||
$r['showPoints'] = (int)$r['showPoints'];
|
||||
$r['questionCount'] = (int)$r['questionCount'];
|
||||
$r['completedCount'] = (int)$r['completedCount'];
|
||||
$r['submissionCount'] = (int)$r['submissionCount'];
|
||||
$r['conditionJson'] = $r['conditionJson'] ?: '{}';
|
||||
}
|
||||
unset($r);
|
||||
|
||||
31
handlers/schedule.php
Normal file
31
handlers/schedule.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
$tokenRec = require_valid_token_web();
|
||||
require_role(['admin', 'supervisor'], $tokenRec);
|
||||
|
||||
if ($method !== 'GET') {
|
||||
json_error('METHOD_NOT_ALLOWED', 'Method not allowed', 405);
|
||||
}
|
||||
|
||||
try {
|
||||
$opened = qdb_open_read_or_fail();
|
||||
[$pdo, $tmpDb, $lockFp] = $opened;
|
||||
|
||||
require_once __DIR__ . '/../lib/session_schedule.php';
|
||||
$entries = qdb_list_session_schedules_scoped($pdo, $tokenRec);
|
||||
|
||||
$byDate = [];
|
||||
foreach ($entries as $entry) {
|
||||
$date = $entry['scheduledDate'];
|
||||
$byDate[$date][] = $entry;
|
||||
}
|
||||
|
||||
qdb_discard($tmpDb, $lockFp);
|
||||
|
||||
json_success([
|
||||
'entries' => $entries,
|
||||
'byDate' => $byDate,
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
qdb_handler_fail($e, 'Load schedule', null, $tmpDb ?? null, $lockFp ?? null);
|
||||
}
|
||||
Reference in New Issue
Block a user