'Unauthorized: Admin access required']); exit; } $allPending = []; $sources = []; // كل مصدر يُجلب على حدة: غياب جدول users في بعض عمليات النشر كان يُفشل // الطلب بالكامل ويخفي طلبات المشرفين المعلقة أيضاً. /** * بعض عمليات النشر أنشأت adminUser بلا عمود status (انظر schema_primary.sql)، * وعندها لا يمكن تمييز الحسابات المعلقة أصلاً. نفحص العمود أولاً لنُرجع سبباً * واضحاً بدل فشل عام. */ function columnExists(PDO $con, string $table, string $column): bool { try { $stmt = $con->prepare("SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?"); $stmt->execute([$table, $column]); return (int) $stmt->fetchColumn() > 0; } catch (Throwable $e) { return false; } } try { if (!columnExists($con, 'adminUser', 'status')) { throw new RuntimeException("adminUser.status column is missing — admin approvals cannot be tracked until it is added."); } $stmt1 = $con->query("SELECT id, name, phone, role, created_at, 'admin' as type FROM adminUser WHERE status = 'pending'"); $admins = $stmt1->fetchAll(PDO::FETCH_ASSOC); foreach ($admins as &$admin) { $admin['name'] = $encryptionHelper->decryptData($admin['name']) ?: $admin['name']; $admin['phone'] = $encryptionHelper->decryptData($admin['phone']) ?: $admin['phone']; } unset($admin); $allPending = array_merge($allPending, $admins); $sources['admins'] = 'ok'; } catch (Throwable $e) { error_log("[Staff Pending] adminUser query failed: " . $e->getMessage()); $sources['admins'] = 'unavailable: ' . $e->getMessage(); } try { $stmt2 = $con->query("SELECT id, first_name, last_name, phone, user_type as role, created_at, 'service' as type FROM users WHERE status = 'pending' AND user_type = 'service'"); $services = $stmt2->fetchAll(PDO::FETCH_ASSOC); foreach ($services as &$service) { $service['name'] = trim( ($encryptionHelper->decryptData($service['first_name']) ?: $service['first_name']) . ' ' . ($encryptionHelper->decryptData($service['last_name']) ?: $service['last_name']) ); $service['phone'] = $encryptionHelper->decryptData($service['phone']) ?: $service['phone']; } unset($service); $allPending = array_merge($allPending, $services); $sources['service_staff'] = 'ok'; } catch (Throwable $e) { error_log("[Staff Pending] users query failed: " . $e->getMessage()); $sources['service_staff'] = 'unavailable'; } printSuccess([ "data" => $allPending, "sources" => $sources, ]); exit();