'essay', 'text' => 'What is the student’s Islamic education background?', ], [ 'type' => 'short_answer', 'text' => 'What is the student’s Arabic competency level?', ], [ 'type' => 'short_answer', 'text' => 'What is the student’s English competency level?', ], [ 'type' => 'essay', 'text' => 'Has the student attended any Sunday/Islamic school in the past? If YES, which one?', ], [ 'type' => 'essay', 'text' => 'Has the student memorized any Surahs? If yes, which one(s)?', ], [ 'type' => 'essay', 'text' => 'Why have the parents chosen AlRahma Sunday School for their child(ren)?', ], [ 'type' => 'essay', 'text' => 'Any serious/special medical condition about the student which we have to be aware of?', ], [ 'type' => 'essay', 'text' => 'If surnames of enrolled students are different, please confirm if they are all siblings; if NOT, then please specify their relationship to each other:', ], [ 'type' => 'essay', 'text' => 'Any other questions / concerns that the parents may have?', ], ]; public function up(): void { if (! $this->db->tableExists('question_pools') || ! $this->db->tableExists('assessment_questions')) { return; } $pool = $this->db->table('question_pools') ->select('id') ->where('name', self::POOL_NAME) ->get() ->getRowArray(); if ($pool === null) { $now = date('Y-m-d H:i:s'); $this->db->table('question_pools')->insert([ 'name' => self::POOL_NAME, 'subject_tag' => 'New Student Intake', 'created_by' => null, 'created_at' => $now, 'updated_at' => $now, ]); $poolId = (int) $this->db->insertID(); } else { $poolId = (int) $pool['id']; } if ($poolId <= 0) return; $now = date('Y-m-d H:i:s'); $maxOrder = $this->db->table('assessment_questions')->selectMax('order_index')->where('pool_id', $poolId)->get()->getRowArray(); $nextOrder = ((int) ($maxOrder['order_index'] ?? 0)) + 1; foreach (self::QUESTIONS as $question) { $exists = $this->db->table('assessment_questions') ->where('pool_id', $poolId) ->where('text', $question['text']) ->countAllResults() > 0; if ($exists) continue; $this->db->table('assessment_questions')->insert([ 'pool_id' => $poolId, 'type' => $question['type'], 'text' => $question['text'], 'options' => null, 'correct_answer' => null, 'points' => 0, 'order_index' => $nextOrder++, 'created_at' => $now, 'updated_at' => $now, ]); } } public function down(): void { if (! $this->db->tableExists('question_pools') || ! $this->db->tableExists('assessment_questions')) { return; } $pool = $this->db->table('question_pools')->select('id')->where('name', self::POOL_NAME)->get()->getRowArray(); if ($pool === null) return; $poolId = (int) $pool['id']; foreach (array_column(self::QUESTIONS, 'text') as $text) { $question = $this->db->table('assessment_questions')->select('id')->where(['pool_id' => $poolId, 'text' => $text])->get()->getRowArray(); if ($question === null) continue; if ($this->db->tableExists('assessment_form_questions') && $this->db->table('assessment_form_questions')->where('question_id', (int) $question['id'])->countAllResults() > 0) { continue; } $this->db->table('assessment_questions')->where('id', (int) $question['id'])->delete(); } $hasQuestions = $this->db->table('assessment_questions')->where('pool_id', $poolId)->countAllResults() > 0; $hasForms = $this->db->tableExists('assessment_forms') && $this->db->table('assessment_forms')->where('pool_id', $poolId)->countAllResults() > 0; if (! $hasQuestions && ! $hasForms) { $this->db->table('question_pools')->where('id', $poolId)->delete(); } } }