setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); [$rbacClause, $rbacParams] = rbac_client_filter($tokenRec); $clientStmt = $pdo->prepare( "SELECT client.clientCode FROM client WHERE $rbacClause ORDER BY client.clientCode" ); foreach ($rbacParams as $k => $v) $clientStmt->bindValue($k, $v); $clientStmt->execute(); $clients = $clientStmt->fetchAll(PDO::FETCH_COLUMN) ?: []; $questionnaireIds = $pdo->query("SELECT questionnaireID FROM questionnaire")->fetchAll(PDO::FETCH_COLUMN) ?: []; $qidSet = array_fill_keys($questionnaireIds, true); $completed = []; $cqStmt = $pdo->prepare( "SELECT cq.clientCode, cq.questionnaireID, cq.status FROM completed_questionnaire cq JOIN client ON client.clientCode = cq.clientCode WHERE $rbacClause" ); foreach ($rbacParams as $k => $v) $cqStmt->bindValue($k, $v); $cqStmt->execute(); while ($row = $cqStmt->fetch(PDO::FETCH_ASSOC)) { $completed[$row['clientCode']][$row['questionnaireID']] = $row['status']; } // client_answer uses questionID, which maps to old "questionId" format $answers = []; $ansStmt = $pdo->prepare( "SELECT ca.clientCode, ca.questionID, ca.answerOptionID, ca.freeTextValue, ca.numericValue FROM client_answer ca JOIN client ON client.clientCode = ca.clientCode WHERE $rbacClause" ); foreach ($rbacParams as $k => $v) $ansStmt->bindValue($k, $v); $ansStmt->execute(); while ($row = $ansStmt->fetch(PDO::FETCH_ASSOC)) { $val = $row['freeTextValue'] ?? $row['answerOptionID'] ?? ''; if ($val === '' && $row['numericValue'] !== null) { $val = (string)$row['numericValue']; } $answers[$row['clientCode']][$row['questionID']] = $val; } echo ''; echo '
| '; foreach ($order as $id) echo ' | '.htmlspecialchars($id).' | '; echo '
|---|---|
| '; foreach ($order as $id) { $key = qdb_header_question_key($id); $lbl = $labels[$id] ?? ''; $title = $lbl !== '' ? $lbl : $id; echo ' | '.htmlspecialchars($key).' | '; } echo '
| '; foreach ($order as $id) { if ($id === 'client_code') { $val = $client; } elseif (isset($qidSet[$id]) && strpos($id, '-') === false) { $status = $completed[$client][$id] ?? ''; $val = ($status === 'done' || $status === 'Done') ? 'Done' : ($status !== '' ? $status : 'Not Done'); } else { $raw = $answers[$client][$id] ?? ''; $val = (strlen(trim($raw)) > 0) ? t_val($id, $raw, $vals) : 'None'; } echo ' | '.htmlspecialchars($val).' | '; } echo '