Update Saqel Platform: 2026-09-12 13:38:49
This commit is contained in:
@@ -35,16 +35,25 @@ class ExamController
|
||||
public function getExams(Request $request, Response $response): void
|
||||
{
|
||||
$queryParams = $request->getQueryParams();
|
||||
$courseId = !empty($queryParams['course_id']) ? (int)$queryParams['course_id'] : null;
|
||||
$lessonId = !empty($queryParams['lesson_id']) ? (int)$queryParams['lesson_id'] : null;
|
||||
$scope = $queryParams['scope'] ?? null;
|
||||
$courseId = !empty($queryParams['course_id']) ? (int)$queryParams['course_id'] : null;
|
||||
$lessonId = !empty($queryParams['lesson_id']) ? (int)$queryParams['lesson_id'] : null;
|
||||
$scope = $queryParams['scope'] ?? null;
|
||||
$subjectCode = !empty($queryParams['subject_code']) ? trim($queryParams['subject_code']) : null;
|
||||
|
||||
$sql = "SELECT e.*, COUNT(q.id) as questions_count
|
||||
FROM exams e
|
||||
LEFT JOIN questions q ON q.exam_id = e.id
|
||||
WHERE e.is_published = 1";
|
||||
FROM exams e ";
|
||||
if ($subjectCode) {
|
||||
$sql .= " JOIN courses c ON c.id = e.course_id
|
||||
JOIN subjects s ON s.id = c.subject_id ";
|
||||
}
|
||||
$sql .= " LEFT JOIN questions q ON q.exam_id = e.id
|
||||
WHERE e.is_published = 1";
|
||||
$params = [];
|
||||
|
||||
if ($subjectCode) {
|
||||
$sql .= " AND s.code = ?";
|
||||
$params[] = $subjectCode;
|
||||
}
|
||||
if ($courseId) {
|
||||
$sql .= " AND e.course_id = ?";
|
||||
$params[] = $courseId;
|
||||
@@ -86,9 +95,28 @@ class ExamController
|
||||
self::ensureSchema();
|
||||
$examId = (int)$request->getParam('id');
|
||||
$isTeacher = ($request->role === 'teacher' || $request->role === 'super_admin');
|
||||
$queryParams = $request->getQueryParams();
|
||||
$subjectCode = !empty($queryParams['subject_code']) ? trim($queryParams['subject_code']) : null;
|
||||
|
||||
$exam = Database::selectOne("SELECT * FROM exams WHERE id = ? LIMIT 1", [$examId]);
|
||||
if (!$exam) {
|
||||
if (!$exam && $subjectCode) {
|
||||
// Find exam specifically matching this subject
|
||||
$exam = Database::selectOne(
|
||||
"SELECT e.* FROM exams e
|
||||
JOIN courses c ON c.id = e.course_id
|
||||
JOIN subjects s ON s.id = c.subject_id
|
||||
JOIN questions q ON q.exam_id = e.id
|
||||
WHERE e.is_published = 1 AND s.code = ?
|
||||
GROUP BY e.id HAVING COUNT(q.id) >= 10
|
||||
ORDER BY e.id DESC LIMIT 1",
|
||||
[$subjectCode]
|
||||
);
|
||||
if ($exam) {
|
||||
$examId = (int)$exam['id'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!$exam && !$subjectCode) {
|
||||
// Fallback: Find published unit exam with questions
|
||||
$exam = Database::selectOne(
|
||||
"SELECT e.* FROM exams e
|
||||
@@ -102,13 +130,14 @@ class ExamController
|
||||
}
|
||||
}
|
||||
|
||||
if (!$exam || (count(Database::select("SELECT id FROM questions WHERE exam_id = ?", [$examId])) < 15)) {
|
||||
// Only seed math unit 1 if requested for math or without subject restriction
|
||||
if ((!$exam || (count(Database::select("SELECT id FROM questions WHERE exam_id = ?", [$examId])) < 15)) && (!$subjectCode || str_contains($subjectCode, 'math'))) {
|
||||
$examId = self::seedUnit1ComprehensiveExam();
|
||||
$exam = Database::selectOne("SELECT * FROM exams WHERE id = ? LIMIT 1", [$examId]);
|
||||
}
|
||||
|
||||
if (!$exam) {
|
||||
$response->status(404)->json(['status' => 'error', 'message' => 'الامتحان غير موجود']);
|
||||
$response->status(404)->json(['status' => 'error', 'message' => 'الامتحان غير موجود لهذا المبحث']);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user