added submission history, data insights, download all functionality
This commit is contained in:
74
db_init.php
74
db_init.php
@ -6,7 +6,15 @@ require_once __DIR__ . '/common.php';
|
||||
define('QDB_PATH', __DIR__ . '/uploads/questionnaire_database');
|
||||
define('QDB_LOCK', __DIR__ . '/uploads/.qdb_lock');
|
||||
define('QDB_SCHEMA', __DIR__ . '/schema.sql');
|
||||
define('QDB_VERSION', 4);
|
||||
define('QDB_VERSION', 5);
|
||||
|
||||
function qdb_table_exists(PDO $pdo, string $table): bool {
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = :t LIMIT 1"
|
||||
);
|
||||
$stmt->execute([':t' => $table]);
|
||||
return (bool)$stmt->fetchColumn();
|
||||
}
|
||||
|
||||
function qdb_column_exists(PDO $pdo, string $table, string $column): bool {
|
||||
$stmt = $pdo->query('PRAGMA table_info(' . $table . ')');
|
||||
@ -29,6 +37,70 @@ function qdb_apply_migrations(PDO $pdo, string $schemaSql): bool {
|
||||
$changed = true;
|
||||
}
|
||||
|
||||
if (!qdb_table_exists($pdo, 'questionnaire_submission')) {
|
||||
$pdo->exec("
|
||||
CREATE TABLE questionnaire_submission (
|
||||
submissionID TEXT NOT NULL PRIMARY KEY,
|
||||
clientCode TEXT NOT NULL,
|
||||
questionnaireID TEXT NOT NULL,
|
||||
version INTEGER NOT NULL,
|
||||
submittedAt INTEGER NOT NULL,
|
||||
submittedByUserID TEXT NOT NULL DEFAULT '',
|
||||
submittedByRole TEXT NOT NULL DEFAULT '',
|
||||
assignedByCoach TEXT,
|
||||
status TEXT NOT NULL DEFAULT '',
|
||||
startedAt INTEGER,
|
||||
completedAt INTEGER,
|
||||
sumPoints INTEGER,
|
||||
FOREIGN KEY(clientCode) REFERENCES client(clientCode),
|
||||
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID),
|
||||
FOREIGN KEY(assignedByCoach) REFERENCES coach(coachID),
|
||||
UNIQUE(clientCode, questionnaireID, version)
|
||||
)
|
||||
");
|
||||
$pdo->exec('CREATE INDEX IF NOT EXISTS idx_submission_client_qn ON questionnaire_submission(clientCode, questionnaireID)');
|
||||
$pdo->exec('CREATE INDEX IF NOT EXISTS idx_submission_client_time ON questionnaire_submission(clientCode, submittedAt)');
|
||||
$changed = true;
|
||||
}
|
||||
|
||||
if (!qdb_table_exists($pdo, 'client_answer_submission')) {
|
||||
$pdo->exec("
|
||||
CREATE TABLE client_answer_submission (
|
||||
submissionID TEXT NOT NULL,
|
||||
questionID TEXT NOT NULL,
|
||||
answerOptionID TEXT,
|
||||
freeTextValue TEXT,
|
||||
numericValue REAL,
|
||||
answeredAt INTEGER,
|
||||
PRIMARY KEY (submissionID, questionID),
|
||||
FOREIGN KEY(submissionID) REFERENCES questionnaire_submission(submissionID) ON DELETE CASCADE,
|
||||
FOREIGN KEY(questionID) REFERENCES question(questionID),
|
||||
FOREIGN KEY(answerOptionID) REFERENCES answer_option(answerOptionID)
|
||||
)
|
||||
");
|
||||
$changed = true;
|
||||
}
|
||||
|
||||
if (!qdb_table_exists($pdo, 'client_followup_note')) {
|
||||
$pdo->exec("
|
||||
CREATE TABLE client_followup_note (
|
||||
clientCode TEXT NOT NULL PRIMARY KEY,
|
||||
note TEXT NOT NULL DEFAULT '',
|
||||
updatedByUserID TEXT NOT NULL DEFAULT '',
|
||||
updatedAt INTEGER NOT NULL,
|
||||
FOREIGN KEY(clientCode) REFERENCES client(clientCode)
|
||||
)
|
||||
");
|
||||
$changed = true;
|
||||
}
|
||||
|
||||
if (qdb_table_exists($pdo, 'questionnaire_submission')) {
|
||||
require_once __DIR__ . '/lib/submissions.php';
|
||||
if (qdb_backfill_submissions_from_live($pdo)) {
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
$currentVersion = (int)$pdo->query('PRAGMA user_version')->fetchColumn();
|
||||
if ($currentVersion < QDB_VERSION) {
|
||||
$pdo->exec('PRAGMA foreign_keys = OFF;');
|
||||
|
||||
Reference in New Issue
Block a user