uploadsDir)) { mkdir($this->uploadsDir, 0755, true); } $dbFile = $this->uploadsDir . '/questionnaire_database'; $lockFile = $this->uploadsDir . '/.qdb_lock'; if (is_file($dbFile)) { unlink($dbFile); } if (is_file($lockFile)) { unlink($lockFile); } if (!defined('QDB_PATH')) { define('QDB_PATH', $dbFile); } if (!defined('QDB_LOCK')) { define('QDB_LOCK', $lockFile); } if (!defined('QDB_SCHEMA')) { define('QDB_SCHEMA', $this->schemaPath); } require_once dirname(__DIR__, 2) . '/common.php'; require_once dirname(__DIR__, 2) . '/db_init.php'; [$pdo, $tmpDb, $lockFp] = qdb_open(true); $this->seed($pdo); qdb_save($tmpDb, $lockFp); } private function seed(PDO $pdo): void { $now = time(); $hash = password_hash(self::PASSWORD, PASSWORD_DEFAULT); $mustChangeHash = password_hash(self::PASSWORD, PASSWORD_DEFAULT); $pdo->exec('DELETE FROM session'); $pdo->exec('DELETE FROM client_answer'); $pdo->exec('DELETE FROM completed_questionnaire'); $pdo->exec('DELETE FROM answer_option_translation'); $pdo->exec('DELETE FROM question_translation'); $pdo->exec('DELETE FROM string_translation'); $pdo->exec('DELETE FROM answer_option'); $pdo->exec('DELETE FROM question'); $pdo->exec('DELETE FROM questionnaire'); $pdo->exec('DELETE FROM client'); $pdo->exec('DELETE FROM coach'); $pdo->exec('DELETE FROM supervisor'); $pdo->exec('DELETE FROM admin'); $pdo->exec('DELETE FROM users'); $pdo->exec('DELETE FROM language'); $insUser = $pdo->prepare( 'INSERT INTO users (userID, username, passwordHash, role, entityID, mustChangePassword, createdAt) VALUES (:uid, :u, :h, :role, :eid, :mcp, :ca)' ); $insUser->execute([ ':uid' => 'user_admin', ':u' => self::ADMIN_USERNAME, ':h' => $hash, ':role' => 'admin', ':eid' => self::ADMIN_ID, ':mcp' => 0, ':ca' => $now, ]); $insUser->execute([ ':uid' => 'user_sup1', ':u' => self::SUPERVISOR1_USERNAME, ':h' => $hash, ':role' => 'supervisor', ':eid' => self::SUPERVISOR1_ID, ':mcp' => 0, ':ca' => $now, ]); $insUser->execute([ ':uid' => 'user_sup2', ':u' => self::SUPERVISOR2_USERNAME, ':h' => $hash, ':role' => 'supervisor', ':eid' => self::SUPERVISOR2_ID, ':mcp' => 0, ':ca' => $now, ]); $insUser->execute([ ':uid' => 'user_coach1', ':u' => self::COACH1_USERNAME, ':h' => $hash, ':role' => 'coach', ':eid' => self::COACH1_ID, ':mcp' => 0, ':ca' => $now, ]); $insUser->execute([ ':uid' => 'user_coach2', ':u' => self::COACH2_USERNAME, ':h' => $hash, ':role' => 'coach', ':eid' => self::COACH2_ID, ':mcp' => 0, ':ca' => $now, ]); $insUser->execute([ ':uid' => 'user_mustchange', ':u' => self::MUST_CHANGE_USERNAME, ':h' => $mustChangeHash, ':role' => 'coach', ':eid' => self::COACH1_ID, ':mcp' => 1, ':ca' => $now, ]); $pdo->prepare('INSERT INTO admin (adminID, username, location) VALUES (?, ?, ?)') ->execute([self::ADMIN_ID, self::ADMIN_USERNAME, 'Test']); $pdo->prepare('INSERT INTO supervisor (supervisorID, username, location) VALUES (?, ?, ?)') ->execute([self::SUPERVISOR1_ID, self::SUPERVISOR1_USERNAME, 'Loc1']); $pdo->prepare('INSERT INTO supervisor (supervisorID, username, location) VALUES (?, ?, ?)') ->execute([self::SUPERVISOR2_ID, self::SUPERVISOR2_USERNAME, 'Loc2']); $pdo->prepare('INSERT INTO coach (coachID, supervisorID, username) VALUES (?, ?, ?)') ->execute([self::COACH1_ID, self::SUPERVISOR1_ID, self::COACH1_USERNAME]); $pdo->prepare('INSERT INTO coach (coachID, supervisorID, username) VALUES (?, ?, ?)') ->execute([self::COACH2_ID, self::SUPERVISOR2_ID, self::COACH2_USERNAME]); $pdo->prepare('INSERT INTO client (clientCode, coachID) VALUES (?, ?)') ->execute([self::CLIENT_COACH1, self::COACH1_ID]); $pdo->prepare('INSERT INTO client (clientCode, coachID) VALUES (?, ?)') ->execute([self::CLIENT_COACH1B, self::COACH1_ID]); $pdo->prepare('INSERT INTO client (clientCode, coachID) VALUES (?, ?)') ->execute([self::CLIENT_COACH2, self::COACH2_ID]); $pdo->prepare( 'INSERT INTO questionnaire (questionnaireID, name, version, state, orderIndex, showPoints, conditionJson) VALUES (?, ?, ?, ?, ?, ?, ?)' )->execute([ self::QUESTIONNAIRE_ID, 'Test Demo', '1.0', 'active', 0, 1, '{}', ]); $qid = self::QUESTIONNAIRE_ID . '__q1'; $pdo->prepare( 'INSERT INTO question (questionID, questionnaireID, defaultText, type, orderIndex, isRequired, configJson) VALUES (?, ?, ?, ?, ?, ?, ?)' )->execute([$qid, self::QUESTIONNAIRE_ID, 'consent_instruction', 'radio_question', 0, 1, '{}']); $pdo->prepare( 'INSERT INTO answer_option (answerOptionID, questionID, defaultText, points, orderIndex, nextQuestionId) VALUES (?, ?, ?, ?, ?, ?)' )->execute(['ao1', $qid, 'consent_signed', 5, 0, '']); $pdo->prepare( 'INSERT INTO answer_option (answerOptionID, questionID, defaultText, points, orderIndex, nextQuestionId) VALUES (?, ?, ?, ?, ?, ?)' )->execute(['ao2', $qid, 'consent_not_signed', 0, 1, '']); } }