-- ============================================================ -- admin_audit_log — جدول سجل تدقيق عمليات الأدمن -- ============================================================ -- الجدول كان مستخدماً في الكود ولا وجود له في schema_primary.sql، أي أنه -- غير موجود على أي نشر نظيف. والنتيجة: -- -- • logAudit() في backend/functions.php يبتلع الاستثناء ويكتفي بـ -- error_log، فكل عملية تدقيق كانت تفشل بصمت (تحديث كازان، تعديل سائق، -- إرسال إشعار جماعي، تشغيل حملة، تحديث إصدار التطبيق). -- • شاشة "سجلات الأمان" تظهر فارغة دائماً — لا لأن العرض معطّل بل لأن -- الاستعلام لا يجد جدولاً. -- -- الأعمدة هنا هي اتحاد ما يكتبه المصدران المختلفان: -- - functions.php::logAudit → admin_id, action, table_name, record_id, details -- - Admin/v2/quality/blacklist_manager.php → admin_id, admin_phone, action, table_name, entity_type, details -- ولذلك فالأعمدة غير المشتركة تقبل NULL. -- -- ملاحظة الترميز: audit_logs.php يربط admin_id مع employee.id و adminUser.id -- عبر COLLATE utf8mb4_general_ci صراحةً، فنُثبّت الترميز نفسه هنا لتفادي -- خطأ "Illegal mix of collations" عند الربط. -- ============================================================ CREATE TABLE IF NOT EXISTS `admin_audit_log` ( `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `admin_id` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `admin_phone` VARCHAR(32) DEFAULT NULL, `action` VARCHAR(255) NOT NULL, `table_name` VARCHAR(100) DEFAULT NULL, `entity_type` VARCHAR(100) DEFAULT NULL, `record_id` VARCHAR(100) DEFAULT NULL, `details` TEXT DEFAULT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY `idx_admin_id` (`admin_id`), KEY `idx_created_at` (`created_at`), KEY `idx_action` (`action`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;