extending results page to show metadata and group by clientid to improve tracking progress
Some checks failed
PHPUnit / test (push) Has been cancelled

This commit is contained in:
2026-07-01 09:26:18 +02:00
parent 13119f300a
commit 223f38a11f
5 changed files with 415 additions and 141 deletions

View File

@ -8,6 +8,7 @@ if ($method !== 'GET') {
$qnID = $_GET['questionnaireID'] ?? '';
$clientCode = $_GET['clientCode'] ?? '';
$allVersions = !empty($_GET['allVersions']);
if (!$qnID) {
json_error('MISSING_PARAM', 'questionnaireID query param required', 400);
@ -51,11 +52,40 @@ unset($q);
[$rbacClause, $rbacParams] = rbac_client_filter($tokenRec, 'cl');
if ($allVersions) {
require_once __DIR__ . '/../lib/submissions.php';
$ctx = qdb_export_questionnaire_context($pdo, $qnID);
$submissions = qdb_results_submission_entries(
$pdo,
$qnID,
$ctx['questions'],
$ctx['resultColumns'],
$ctx['optionTextMap'],
$tokenRec
);
if ($clientCode) {
$submissions = array_values(array_filter(
$submissions,
static fn(array $row): bool => ($row['clientCode'] ?? '') === $clientCode
));
}
qdb_discard($tmpDb, $lockFp);
json_success([
'questionnaire' => $questionnaire,
'questions' => $questions,
'allVersions' => true,
'submissions' => $submissions,
]);
}
$sql = "
SELECT cl.clientCode, cl.coachID,
co.username AS coachUsername,
sv.username AS supervisorUsername,
cq.status, cq.startedAt, cq.completedAt, cq.sumPoints, cq.assignedByCoach
cq.status, cq.startedAt, cq.completedAt, cq.sumPoints, cq.assignedByCoach,
cq.programCycleNumber, cq.programSessionID, cq.programSessionNumber
FROM client cl
INNER JOIN completed_questionnaire cq ON cq.clientCode = cl.clientCode AND cq.questionnaireID = :qnid
LEFT JOIN coach co ON co.coachID = cl.coachID
@ -86,6 +116,8 @@ if (!empty($questionIDs) && !empty($clients)) {
$c['sumPoints'] = $c['sumPoints'] !== null ? (int)$c['sumPoints'] : null;
$c['startedAt'] = $c['startedAt'] !== null ? (int)$c['startedAt'] : null;
$c['completedAt'] = $c['completedAt'] !== null ? (int)$c['completedAt'] : null;
$c['programCycleNumber'] = $c['programCycleNumber'] !== null ? (int)$c['programCycleNumber'] : null;
$c['programSessionNumber'] = $c['programSessionNumber'] !== null ? (int)$c['programSessionNumber'] : null;
$bindParams = array_merge([$c['clientCode']], $questionIDs);
$answerStmt->execute($bindParams);
@ -107,6 +139,8 @@ if (!empty($questionIDs) && !empty($clients)) {
$c['sumPoints'] = $c['sumPoints'] !== null ? (int)$c['sumPoints'] : null;
$c['startedAt'] = $c['startedAt'] !== null ? (int)$c['startedAt'] : null;
$c['completedAt'] = $c['completedAt'] !== null ? (int)$c['completedAt'] : null;
$c['programCycleNumber'] = $c['programCycleNumber'] !== null ? (int)$c['programCycleNumber'] : null;
$c['programSessionNumber'] = $c['programSessionNumber'] !== null ? (int)$c['programSessionNumber'] : null;
$c['answers'] = (object)[];
}
unset($c);
@ -117,6 +151,7 @@ if (!empty($questionIDs) && !empty($clients)) {
json_success([
'questionnaire' => $questionnaire,
'questions' => $questions,
'allVersions' => false,
'clients' => $clients,
]);
} catch (Throwable $e) {