prepare( "SELECT id, name_ar, contract_status FROM transit_orgs WHERE id=? LIMIT 1" ); $chkOrg->execute([$orgId]); $org = $chkOrg->fetch(); if (!$org) jsonError('Organization not found', 404); if ($org['contract_status'] === 'terminated') jsonError('Organization account inactive', 403); $chkEnroll = $transit_con->prepare( "SELECT id, status FROM transit_enrollments WHERE org_id=? AND passenger_id=? LIMIT 1" ); $chkEnroll->execute([$orgId, $transit_user_id]); $existing = $chkEnroll->fetch(); if ($existing && in_array($existing['status'], ['active', 'pending'])) { jsonError('Enrollment already exists', 409); } $encryptedId = $encryptionHelper->encryptData($studentId); // مطابقة الكشف: هل الرقم موجود في كشف مستورد بدون passenger_id؟ $stRoster = $transit_con->prepare( "SELECT id, member_name FROM transit_enrollments WHERE org_id=? AND student_id=? AND passenger_id IS NULL LIMIT 1" ); $stRoster->execute([$orgId, $encryptedId]); $rosterRow = $stRoster->fetch(); if ($rosterRow) { $transit_con->prepare( "UPDATE transit_enrollments SET passenger_id=?, status='active', verified_at=NOW(), verify_method='roster_phone_match' WHERE id=?" )->execute([$transit_user_id, $rosterRow['id']]); jsonSuccess([ 'enrollment_id' => (int)$rosterRow['id'], 'org_name' => $org['name_ar'], 'status' => 'active', 'verify_method' => 'roster_phone_match', ], 'تم التحقق من عضويتك بنجاح!'); } // طلب يدوي ينتظر موافقة المشرف $transit_con->prepare( "INSERT INTO transit_enrollments (org_id, passenger_id, student_id, verify_method, status) VALUES (?,?,?,'manual_admin','pending')" )->execute([$orgId, $transit_user_id, $encryptedId]); jsonSuccess([ 'enrollment_id' => (int)$transit_con->lastInsertId(), 'org_name' => $org['name_ar'], 'status' => 'pending', ], 'طلبك قيد المراجعة. سيتم إشعارك عند التفعيل.');