Update Saqel Platform: 2026-09-12 13:38:49

This commit is contained in:
Hamza-Ayed
2026-09-12 13:38:49 +03:00
parent 1f31369893
commit f4d4f02853
34 changed files with 9136 additions and 386 deletions
+38 -9
View File
@@ -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;
}