[ 'nav_home' => 'Home', 'nav_dashboard' => 'Dashboard', 'nav_login' => 'Login', 'nav_logout' => 'Logout', 'nav_register' => 'Register', 'welcome' => 'Welcome to Logistics Platform', 'hero_title' => 'Fast & Reliable Logistics', 'hero_subtitle' => 'Connecting shippers and truck owners seamlessly.', 'track_shipment' => 'Track Shipment', 'enter_tracking' => 'Enter Tracking ID', 'footer_rights' => 'All rights reserved.', 'login_title' => 'Login', 'email_label' => 'Email Address', 'password_label' => 'Password', 'login_btn' => 'Sign In', 'register_link' => "Don't have an account? Register here.", 'dashboard_title' => 'Dashboard', 'post_shipment' => 'Post New Shipment', 'recent_shipments' => 'Recent Shipments', 'status' => 'Status', 'actions' => 'Actions', 'view_details' => 'View Details', 'edit' => 'Edit', 'delete' => 'Delete', 'profile' => 'Profile', 'settings' => 'Settings', 'my_shipments' => 'My Shipments', 'find_trucks' => 'Find Trucks', 'contact_us' => 'Contact Us', 'about_us' => 'About Us', 'privacy_policy' => 'Privacy Policy', 'terms_conditions' => 'Terms & Conditions', 'admin_panel' => 'Admin Panel', 'users' => 'Users', 'reports' => 'Reports', 'logout_confirm' => 'Are you sure you want to logout?', 'yes' => 'Yes', 'no' => 'No', 'cancel' => 'Cancel', 'save' => 'Save', 'update' => 'Update', 'created_at' => 'Created At', 'updated_at' => 'Updated At', 'id' => 'ID', 'name' => 'Name', 'role' => 'Role', 'approved' => 'Approved', 'pending' => 'Pending', 'rejected' => 'Rejected', 'active' => 'Active', 'inactive' => 'Inactive', 'success_message' => 'Operation successful.', 'error_message' => 'An error occurred. Please try again.', 'manage_shipments' => 'Manage Shipments', 'manage_users' => 'Manage Users', 'manage_trucks' => 'Manage Trucks', 'truck_owner' => 'Truck Owner', 'shipper' => 'Shipper', 'admin' => 'Admin', 'notifications' => 'Notifications', 'mark_read' => 'Mark as Read', 'view_all' => 'View All', 'new_shipment_alert' => 'New shipment posted!', 'shipment_update_alert' => 'Shipment status updated.', 'offer_received' => 'New offer received.', 'offer_accepted' => 'Offer accepted.', 'offer_rejected' => 'Offer rejected.', 'payment_received' => 'Payment received.', 'payment_pending' => 'Payment pending.', 'payment_failed' => 'Payment failed.', 'search' => 'Search...', 'filter' => 'Filter', 'sort_by' => 'Sort By', 'date' => 'Date', 'price' => 'Price', 'loading' => 'Loading...', 'no_data' => 'No data available.', 'unauthorized' => 'Unauthorized access.', 'page_not_found' => 'Page not found.', 'server_error' => 'Internal Server Error.', 'go_back' => 'Go Back', 'home_btn' => 'Go Home', 'reset_password' => 'Reset Password', 'forgot_password' => 'Forgot Password?', 'send_link' => 'Send Reset Link', 'password_reset_sent' => 'Password reset link sent to your email.', 'password_changed' => 'Password changed successfully.', 'confirm_password' => 'Confirm Password', 'current_password' => 'Current Password', 'new_password' => 'New Password', 'change_password' => 'Change Password', 'personal_info' => 'Personal Information', 'company_info' => 'Company Information', 'truck_info' => 'Truck Information', 'documents' => 'Documents', 'upload_doc' => 'Upload Document', 'download' => 'Download', 'file_too_large' => 'File is too large.', 'invalid_file_type' => 'Invalid file type.', 'upload_success' => 'File uploaded successfully.', 'delete_confirm' => 'Are you sure you want to delete this?', 'deleted_success' => 'Deleted successfully.', 'feature_not_available' => 'Feature not available yet.', 'coming_soon' => 'Coming Soon', 'contact_support' => 'Contact Support', 'faq' => 'FAQ', 'language' => 'Language', 'english' => 'English', 'arabic' => 'Arabic', 'switch_lang' => 'Switch Language', 'dark_mode' => 'Dark Mode', 'light_mode' => 'Light Mode', 'notifications_settings' => 'Notification Settings', 'email_notif' => 'Email Notifications', 'sms_notif' => 'SMS Notifications', 'push_notif' => 'Push Notifications', 'enable' => 'Enable', 'disable' => 'Disable', 'account_settings' => 'Account Settings', 'delete_account' => 'Delete Account', 'delete_account_warning' => 'This action is irreversible.', 'feedback' => 'Feedback', 'rate_us' => 'Rate Us', 'copyright' => 'Copyright © ' . date('Y'), 'powered_by' => 'Powered by Logistics Platform', 'terms_of_service' => 'Terms of Service', 'cookie_policy' => 'Cookie Policy', 'careers' => 'Careers', 'blog' => 'Blog', 'partners' => 'Partners', 'help_center' => 'Help Center', 'how_it_works' => 'How It Works', 'pricing' => 'Pricing', 'get_started' => 'Get Started', 'learn_more' => 'Learn More', 'demo' => 'Request Demo', 'subscribe' => 'Subscribe', 'newsletter' => 'Newsletter', 'enter_email' => 'Enter your email', 'invalid_email' => 'Invalid email address.', 'message_sent' => 'Message sent successfully.', 'thank_you' => 'Thank you!', '404_msg' => 'The page you are looking for does not exist.', '500_msg' => 'Something went wrong on our end.', 'maintenance_msg' => 'System is under maintenance. Please try again later.', 'session_expired' => 'Session expired. Please login again.', 'login_required' => 'Login required to access this page.', 'access_denied' => 'Access denied.', 'csrf_error' => 'Invalid security token. Please refresh and try again.', 'validation_error' => 'Please correct the errors below.', 'required_field' => 'This field is required.', 'min_length' => 'Minimum length is %s characters.', 'max_length' => 'Maximum length is %s characters.', 'numeric_only' => 'Only numbers are allowed.', 'alpha_only' => 'Only letters are allowed.', 'alphanumeric_only' => 'Only letters and numbers are allowed.', 'email_exists' => 'Email already exists.', 'username_exists' => 'Username already exists.', 'password_mismatch' => 'Passwords do not match.', 'invalid_credentials' => 'Invalid email or password.', 'account_locked' => 'Account is locked. Please contact support.', 'too_many_attempts' => 'Too many login attempts. Please try again later.', 'verify_email' => 'Please verify your email address.', 'email_verified' => 'Email verified successfully.', 'verification_link_sent' => 'Verification link sent.', 'invalid_token' => 'Invalid or expired token.', 'token_expired' => 'Token has expired.', 'resend_verification' => 'Resend Verification Email', 'dashboard_overview' => 'Overview', 'total_shipments' => 'Total Shipments', 'active_trucks' => 'Active Trucks', 'pending_approvals' => 'Pending Approvals', 'revenue' => 'Revenue', 'recent_activity' => 'Recent Activity', 'view_all_shipments' => 'View All Shipments', 'view_all_users' => 'View All Users', 'add_new' => 'Add New', 'export' => 'Export', 'import' => 'Import', 'print' => 'Print', 'copy' => 'Copy', 'csv' => 'CSV', 'excel' => 'Excel', 'pdf' => 'PDF', 'search_results' => 'Search Results', 'no_results' => 'No results found.', 'showing_entries' => 'Showing %s to %s of %s entries', 'next_page' => 'Next', 'prev_page' => 'Previous', 'first_page' => 'First', 'last_page' => 'Last', 'apply' => 'Apply', 'clear' => 'Clear', 'filter_by' => 'Filter by', 'status_all' => 'All Statuses', 'role_all' => 'All Roles', 'date_range' => 'Date Range', 'today' => 'Today', 'yesterday' => 'Yesterday', 'last_7_days' => 'Last 7 Days', 'last_30_days' => 'Last 30 Days', 'this_month' => 'This Month', 'last_month' => 'Last Month', 'custom_range' => 'Custom Range', 'start_date' => 'Start Date', 'end_date' => 'End Date', 'to' => 'to', 'from' => 'From', 'subject' => 'Subject', 'message' => 'Message', 'send_message' => 'Send Message', 'reply' => 'Reply', 'forward' => 'Forward', 'mark_unread' => 'Mark as Unread', 'delete_selected' => 'Delete Selected', 'archive' => 'Archive', 'spam' => 'Spam', 'trash' => 'Trash', 'compose' => 'Compose', 'inbox' => 'Inbox', 'sent' => 'Sent', 'drafts' => 'Drafts', 'important' => 'Important', 'starred' => 'Starred', 'labels' => 'Labels', 'add_label' => 'Add Label', 'remove_label' => 'Remove Label', 'color' => 'Color', 'description' => 'Description', 'edit_profile' => 'Edit Profile', 'change_avatar' => 'Change Avatar', 'bio' => 'Bio', 'location' => 'Location', 'website' => 'Website', 'social_links' => 'Social Links', 'facebook' => 'Facebook', 'twitter' => 'Twitter', 'linkedin' => 'LinkedIn', 'instagram' => 'Instagram', 'youtube' => 'YouTube', 'github' => 'GitHub', 'save_changes' => 'Save Changes', 'discard_changes' => 'Discard Changes', 'unsaved_changes' => 'You have unsaved changes.', 'stay_on_page' => 'Stay on Page', 'leave_page' => 'Leave Page', 'confirm_action' => 'Confirm Action', 'action_cannot_undone' => 'This action cannot be undone.', 'type_confirm' => 'Type "CONFIRM" to proceed.', 'notifications_permission' => 'Allow notifications?', 'allow' => 'Allow', 'deny' => 'Deny', 'location_permission' => 'Allow location access?', 'camera_permission' => 'Allow camera access?', 'mic_permission' => 'Allow microphone access?', 'cookie_consent' => 'We use cookies to improve your experience.', 'accept_all' => 'Accept All', 'reject_all' => 'Reject All', 'customize' => 'Customize', 'preferences' => 'Preferences', 'general' => 'General', 'security' => 'Security', 'billing' => 'Billing', 'integrations' => 'Integrations', 'api_keys' => 'API Keys', 'generate_key' => 'Generate Key', 'revoke_key' => 'Revoke Key', 'webhook_url' => 'Webhook URL', 'secret_key' => 'Secret Key', 'documentation' => 'Documentation', 'support_ticket' => 'Support Ticket', 'open_ticket' => 'Open Ticket', 'ticket_id' => 'Ticket ID', 'priority' => 'Priority', 'low' => 'Low', 'medium' => 'Medium', 'high' => 'High', 'critical' => 'Critical', 'status_open' => 'Open', 'status_closed' => 'Closed', 'status_pending' => 'Pending', 'last_reply' => 'Last Reply', 'assigned_to' => 'Assigned To', 'created_by' => 'Created By', 'resolved_at' => 'Resolved At', 'closed_at' => 'Closed At', 'reopen' => 'Reopen', 'close' => 'Close', 'add_comment' => 'Add Comment', 'attach_file' => 'Attach File', 'max_size' => 'Max size: %s', 'allowed_types' => 'Allowed types: %s', 'drag_drop' => 'Drag and drop files here', 'browse' => 'Browse', 'uploading' => 'Uploading...', 'completed' => 'Completed', 'failed' => 'Failed', 'retry' => 'Retry', 'cancel_upload' => 'Cancel Upload', 'remove' => 'Remove', 'preview' => 'Preview', 'zoom_in' => 'Zoom In', 'zoom_out' => 'Zoom Out', 'rotate' => 'Rotate', 'fullscreen' => 'Fullscreen', 'print_preview' => 'Print Preview', 'download_pdf' => 'Download PDF', 'share' => 'Share', 'copy_link' => 'Copy Link', 'email_link' => 'Email Link', 'embed' => 'Embed', 'qrcode' => 'QR Code', 'scan_qrcode' => 'Scan QR Code', 'auth_code' => 'Authentication Code', '2fa' => 'Two-Factor Authentication', 'setup_2fa' => 'Setup 2FA', 'disable_2fa' => 'Disable 2FA', 'enter_code' => 'Enter Code', 'backup_codes' => 'Backup Codes', 'generate_codes' => 'Generate Codes', 'print_codes' => 'Print Codes', 'recovery_email' => 'Recovery Email', 'verify_phone' => 'Verify Phone Number', 'sms_code' => 'SMS Code', 'resend_code' => 'Resend Code', 'code_sent' => 'Code sent.', 'phone_verified' => 'Phone verified.', 'country_code' => 'Country Code', 'phone_number' => 'Phone Number', 'address_line1' => 'Address Line 1', 'address_line2' => 'Address Line 2', 'city_state' => 'City/State', 'postal_code' => 'Postal Code', 'country_region' => 'Country/Region', 'billing_address' => 'Billing Address', 'shipping_address' => 'Shipping Address', 'same_as_billing' => 'Same as billing address', 'add_address' => 'Add Address', 'edit_address' => 'Edit Address', 'delete_address' => 'Delete Address', 'default_address' => 'Default Address', 'set_default' => 'Set as Default', 'payment_method' => 'Payment Method', 'credit_card' => 'Credit Card', 'paypal' => 'PayPal', 'bank_transfer' => 'Bank Transfer', 'cash_on_delivery' => 'Cash on Delivery', 'card_number' => 'Card Number', 'expiry_date' => 'Expiry Date', 'cvv' => 'CVV', 'card_holder' => 'Card Holder Name', 'save_card' => 'Save card for future use', 'transaction_history' => 'Transaction History', 'invoice' => 'Invoice', 'receipt' => 'Receipt', 'amount' => 'Amount', 'currency' => 'Currency', 'tax' => 'Tax', 'discount' => 'Discount', 'subtotal' => 'Subtotal', 'total' => 'Total', 'promo_code' => 'Promo Code', 'apply_code' => 'Apply Code', 'invalid_code' => 'Invalid promo code.', 'checkout' => 'Checkout', 'place_order' => 'Place Order', 'order_summary' => 'Order Summary', 'cart' => 'Cart', 'empty_cart' => 'Your cart is empty.', 'continue_shopping' => 'Continue Shopping', 'add_to_cart' => 'Add to Cart', 'remove_from_cart' => 'Remove from Cart', 'update_cart' => 'Update Cart', 'quantity' => 'Quantity', 'unit_price' => 'Unit Price', 'total_price' => 'Total Price', 'product_details' => 'Product Details', 'specifications' => 'Specifications', 'reviews' => 'Reviews', 'write_review' => 'Write a Review', 'rating' => 'Rating', 'stars' => 'Stars', 'related_products' => 'Related Products', 'wishlist' => 'Wishlist', 'add_to_wishlist' => 'Add to Wishlist', 'remove_from_wishlist' => 'Remove from Wishlist', 'compare' => 'Compare', 'add_to_compare' => 'Add to Compare', 'clear_compare' => 'Clear Compare', 'compare_products' => 'Compare Products', 'category' => 'Category', 'brand' => 'Brand', 'model' => 'Model', 'sku' => 'SKU', 'availability' => 'Availability', 'in_stock' => 'In Stock', 'out_of_stock' => 'Out of Stock', 'pre_order' => 'Pre-Order', 'limited_stock' => 'Limited Stock', 'new_arrival' => 'New Arrival', 'best_seller' => 'Best Seller', 'featured' => 'Featured', 'sale' => 'Sale', 'hot' => 'Hot', 'deal_of_day' => 'Deal of the Day', 'timer_end' => 'Offer ends in', 'days' => 'Days', 'hours' => 'Hours', 'minutes' => 'Minutes', 'seconds' => 'Seconds', 'subscribe_text' => 'Subscribe to our newsletter for latest updates.', 'follow_us' => 'Follow Us', 'app_download' => 'Download App', 'app_store' => 'App Store', 'google_play' => 'Google Play', 'secure_payment' => 'Secure Payment', 'fast_delivery' => 'Fast Delivery', '24_7_support' => '24/7 Support', 'money_back' => 'Money Back Guarantee', 'easy_returns' => 'Easy Returns', 'gift_cards' => 'Gift Cards', 'track_order' => 'Track Order', 'order_id' => 'Order ID', 'shipping_info' => 'Shipping Info', 'billing_info' => 'Billing Info', 'order_status' => 'Order Status', 'processing' => 'Processing', 'shipped' => 'Shipped', 'delivered' => 'Delivered', 'cancelled' => 'Cancelled', 'returned' => 'Returned', 'refunded' => 'Refunded', 'return_policy' => 'Return Policy', 'shipping_policy' => 'Shipping Policy', 'sitemap' => 'Sitemap', 'accessibility' => 'Accessibility', 'accessibility_statement' => 'Accessibility Statement', 'skip_to_content' => 'Skip to Content', 'high_contrast' => 'High Contrast', 'text_size' => 'Text Size', 'increase' => 'Increase', 'decrease' => 'Decrease', 'reset' => 'Reset', 'print_page' => 'Print Page', 'read_aloud' => 'Read Aloud', 'stop' => 'Stop', 'pause' => 'Pause', 'resume' => 'Resume', 'mute' => 'Mute', 'unmute' => 'Unmute', 'volume' => 'Volume', 'speed' => 'Speed', 'normal' => 'Normal', 'fast' => 'Fast', 'slow' => 'Slow', 'captions' => 'Captions', 'subtitles' => 'Subtitles', 'audio_desc' => 'Audio Description', 'keyboard_shortcuts' => 'Keyboard Shortcuts', 'help' => 'Help', 'close_menu' => 'Close Menu', 'open_menu' => 'Open Menu', 'menu' => 'Menu', 'navigation' => 'Navigation', 'breadcrumbs' => 'Breadcrumbs', 'pagination' => 'Pagination', 'modal' => 'Modal', 'dialog' => 'Dialog', 'tooltip' => 'Tooltip', 'popover' => 'Popover', 'alert' => 'Alert', 'notification' => 'Notification', 'toast' => 'Toast', 'banner' => 'Banner', 'sidebar' => 'Sidebar', 'footer' => 'Footer', 'header' => 'Header', 'main_content' => 'Main Content', 'admin_dashboard_title' => 'Admin Dashboard', 'wablas_server_url' => 'Wablas Server URL', 'wablas_api_token' => 'Wablas API Token', 'reg_title' => 'Create Account', 'reg_subtitle' => 'Sign up to get started', 'reg_success_pending' => 'Registration successful. Your account is pending approval.', 'reg_success' => 'Registration successful. You can now login.', 'role' => 'Role', 'shipper' => 'Shipper', 'truck_owner' => 'Truck Owner', 'email' => 'Email', 'password' => 'Password', 'phone' => 'Phone', 'country' => 'Country', 'select_country' => 'Select Country', 'city' => 'City', 'select_city' => 'Select City', 'address' => 'Address', 'shipper_details' => 'Shipper Details', 'company_name' => 'Company Name', 'truck_details' => 'Truck Details', 'truck_type' => 'Truck Type', 'load_capacity' => 'Load Capacity (Tons)', 'plate_no' => 'Plate Number', 'bank_account' => 'Bank Account', 'bank_name' => 'Bank Name', 'bank_branch' => 'Branch Name', 'id_card_front' => 'ID Card (Front)', 'id_card_back' => 'ID Card (Back)', 'truck_reg_front' => 'Truck Registration (Front)', 'truck_reg_back' => 'Truck Registration (Back)', 'truck_picture' => 'Truck Picture', 'create_account' => 'Create Account', 'back_to_admin' => 'Back to Admin', 'back_to_home' => 'Back to Home', 'total_revenue' => 'Total Revenue', 'shipments_analytics' => 'Shipments Analytics', 'export_csv' => 'Export CSV', 'status_posted' => 'Posted', 'status_offered' => 'Offered', 'status_confirmed' => 'Confirmed', 'status_in_transit' => 'In Transit', 'status_delivered' => 'Delivered', 'status_pending' => 'Pending', 'status_active' => 'Active', 'status_rejected' => 'Rejected', 'status_unpaid' => 'Unpaid', 'status_paid' => 'Paid', 'payment_thawani' => 'Thawani', 'payment_bank' => 'Bank Transfer', 'currency_symbol' => 'OMR', 'total_shippers' => 'Total Shippers', 'active_shipments' => 'Active Shipments', 'total_truck_owners' => 'Total Truck Owners', 'admin_dashboard' => 'Admin Dashboard', 'overview_performance' => 'Overview & Performance', 'no_shipments' => 'No shipments found.', 'shipment' => 'Shipment', 'route' => 'Route', 'action' => 'Action', 'manage_countries' => 'Manage Countries', 'add_remove_countries' => 'Add/Remove Countries', 'manage_cities' => 'Manage Cities', 'configure_cities' => 'Configure Cities', 'register_user' => 'Register User', 'manually_onboard' => 'Manually Onboard User', 'company_profile' => 'Company Profile', 'update_branding' => 'Update Branding', 'summary_report' => 'Summary Report', 'view_analytics' => 'View Analytics' ], 'ar' => [ 'nav_home' => 'الرئيسية', 'nav_dashboard' => 'لوحة التحكم', 'nav_login' => 'تسجيل الدخول', 'nav_logout' => 'تسجيل الخروج', 'nav_register' => 'تسجيل جديد', 'welcome' => 'مرحباً بك في منصة الخدمات اللوجستية', 'hero_title' => 'خدمات لوجستية سريعة وموثوقة', 'hero_subtitle' => 'نربط الشاحنين وأصحاب الشاحنات بسلاسة.', 'track_shipment' => 'تتبع الشحنة', 'enter_tracking' => 'أدخل رقم التتبع', 'footer_rights' => 'جميع الحقوق محفوظة.', 'login_title' => 'تسجيل الدخول', 'email_label' => 'البريد الإلكتروني', 'password_label' => 'كلمة المرور', 'login_btn' => 'دخول', 'register_link' => 'ليس لديك حساب؟ سجل هنا.', 'dashboard_title' => 'لوحة التحكم', 'post_shipment' => 'نشر شحنة جديدة', 'recent_shipments' => 'الشحنات الأخيرة', 'status' => 'الحالة', 'actions' => 'الإجراءات', 'view_details' => 'عرض التفاصيل', 'edit' => 'تعديل', 'delete' => 'حذف', 'profile' => 'الملف الشخصي', 'settings' => 'الإعدادات', 'my_shipments' => 'شحناتي', 'find_trucks' => 'البحث عن شاحنات', 'contact_us' => 'اتصل بنا', 'about_us' => 'من نحن', 'privacy_policy' => 'سياسة الخصوصية', 'terms_conditions' => 'الشروط والأحكام', 'admin_panel' => 'لوحة الإدارة', 'users' => 'المستخدمين', 'reports' => 'التقارير', 'logout_confirm' => 'هل أنت متأكد من تسجيل الخروج؟', 'yes' => 'نعم', 'no' => 'لا', 'cancel' => 'إلغاء', 'save' => 'حفظ', 'update' => 'تحديث', 'created_at' => 'تاريخ الإنشاء', 'updated_at' => 'تاريخ التحديث', 'id' => 'المعرف', 'name' => 'الاسم', 'role' => 'الدور', 'approved' => 'مقبول', 'pending' => 'قيد الانتظار', 'rejected' => 'مرفوض', 'active' => 'نشط', 'inactive' => 'غير نشط', 'success_message' => 'تمت العملية بنجاح.', 'error_message' => 'حدث خطأ. يرجى المحاولة مرة أخرى.', 'manage_shipments' => 'إدارة الشحنات', 'manage_users' => 'إدارة المستخدمين', 'manage_trucks' => 'إدارة الشاحنات', 'truck_owner' => 'مالك شاحنة', 'shipper' => 'شاحن', 'admin' => 'مسؤول', 'notifications' => 'الإشعارات', 'mark_read' => 'تحديد كمقروء', 'view_all' => 'عرض الكل', 'new_shipment_alert' => 'تم نشر شحنة جديدة!', 'shipment_update_alert' => 'تم تحديث حالة الشحنة.', 'offer_received' => 'تم استلام عرض جديد.', 'offer_accepted' => 'تم قبول العرض.', 'offer_rejected' => 'تم رفض العرض.', 'payment_received' => 'تم استلام الدفعة.', 'payment_pending' => 'الدفعة معلقة.', 'payment_failed' => 'فشلت عملية الدفع.', 'search' => 'بحث...', 'filter' => 'تصفية', 'sort_by' => 'فرز حسب', 'date' => 'التاريخ', 'price' => 'السعر', 'loading' => 'جار التحميل...', 'no_data' => 'لا توجد بيانات متاحة.', 'unauthorized' => 'وصول غير مصرح به.', 'page_not_found' => 'الصفحة غير موجودة.', 'server_error' => 'خطأ في الخادم.', 'go_back' => 'رجوع', 'home_btn' => 'الصفحة الرئيسية', 'reset_password' => 'إعادة تعيين كلمة المرور', 'forgot_password' => 'نسيت كلمة المرور؟', 'send_link' => 'إرسال رابط التعيين', 'password_reset_sent' => 'تم إرسال رابط إعادة التعيين إلى بريدك الإلكتروني.', 'password_changed' => 'تم تغيير كلمة المرور بنجاح.', 'confirm_password' => 'تأكيد كلمة المرور', 'current_password' => 'كلمة المرور الحالية', 'new_password' => 'كلمة المرور الجديدة', 'change_password' => 'تغيير كلمة المرور', 'personal_info' => 'المعلومات الشخصية', 'company_info' => 'معلومات الشركة', 'truck_info' => 'معلومات الشاحنة', 'documents' => 'المستندات', 'upload_doc' => 'رفع مستند', 'download' => 'تحميل', 'file_too_large' => 'حجم الملف كبير جداً.', 'invalid_file_type' => 'نوع الملف غير صالح.', 'upload_success' => 'تم رفع الملف بنجاح.', 'delete_confirm' => 'هل أنت متأكد من الحذف؟', 'deleted_success' => 'تم الحذف بنجاح.', 'feature_not_available' => 'الخدمة غير متوفرة حالياً.', 'coming_soon' => 'قريباً', 'contact_support' => 'اتصل بالدعم', 'faq' => 'الأسئلة الشائعة', 'language' => 'اللغة', 'english' => 'إنجليزي', 'arabic' => 'عربي', 'switch_lang' => 'تغيير اللغة', 'dark_mode' => 'الوضع الليلي', 'light_mode' => 'الوضع النهاري', 'notifications_settings' => 'إعدادات الإشعارات', 'email_notif' => 'إشعارات البريد الإلكتروني', 'sms_notif' => 'إشعارات الرسائل القصيرة', 'push_notif' => 'إشعارات الدفع', 'enable' => 'تفعيل', 'disable' => 'تعطيل', 'account_settings' => 'إعدادات الحساب', 'delete_account' => 'حذف الحساب', 'delete_account_warning' => 'هذا الإجراء لا يمكن التراجع عنه.', 'feedback' => 'رأيك يهمنا', 'rate_us' => 'قيمنا', 'copyright' => 'حقوق النشر © ' . date('Y'), 'powered_by' => 'مشغل بواسطة منصة اللوجستيات', 'terms_of_service' => 'شروط الخدمة', 'cookie_policy' => 'سياسة ملفات الارتباط', 'careers' => 'وظائف', 'blog' => 'المدونة', 'partners' => 'الشركاء', 'help_center' => 'مركز المساعدة', 'how_it_works' => 'كيف نعمل', 'pricing' => 'الأسعار', 'get_started' => 'ابدأ الآن', 'learn_more' => 'اعرف المزيد', 'demo' => 'طلب عرض توضيحي', 'subscribe' => 'اشترك', 'newsletter' => 'النشرة البريدية', 'enter_email' => 'أدخل بريدك الإلكتروني', 'invalid_email' => 'بريد إلكتروني غير صالح.', 'message_sent' => 'تم إرسال الرسالة بنجاح.', 'thank_you' => 'شكراً لك!', '404_msg' => 'الصفحة التي تبحث عنها غير موجودة.', '500_msg' => 'حدث خطأ من جانبنا.', 'maintenance_msg' => 'النظام تحت الصيانة. يرجى المحاولة لاحقاً.', 'session_expired' => 'انتهت الجلسة. يرجى تسجيل الدخول مرة أخرى.', 'login_required' => 'يجب تسجيل الدخول للوصول لهذه الصفحة.', 'access_denied' => 'تم رفض الوصول.', 'csrf_error' => 'رمز الحماية غير صالح. يرجى التحديث والمحاولة مرة أخرى.', 'validation_error' => 'يرجى تصحيح الأخطاء أدناه.', 'required_field' => 'هذا الحقل مطلوب.', 'min_length' => 'الحد الأدنى للطول هو %s حرف.', 'max_length' => 'الحد الأقصى للطول هو %s حرف.', 'numeric_only' => 'الأرقام فقط مسموحة.', 'alpha_only' => 'الحروف فقط مسموحة.', 'alphanumeric_only' => 'الحروف والأرقام فقط مسموحة.', 'email_exists' => 'البريد الإلكتروني موجود بالفعل.', 'username_exists' => 'اسم المستخدم موجود بالفعل.', 'password_mismatch' => 'كلمات المرور غير متطابقة.', 'invalid_credentials' => 'البريد الإلكتروني أو كلمة المرور غير صحيحة.', 'account_locked' => 'الحساب مقفل. يرجى الاتصال بالدعم.', 'too_many_attempts' => 'محاولات دخول كثيرة جداً. يرجى المحاولة لاحقاً.', 'verify_email' => 'يرجى تأكيد بريدك الإلكتروني.', 'email_verified' => 'تم تأكيد البريد الإلكتروني بنجاح.', 'verification_link_sent' => 'تم إرسال رابط التأكيد.', 'invalid_token' => 'الرمز غير صالح أو منتهي.', 'token_expired' => 'انتهت صلاحية الرمز.', 'resend_verification' => 'إعادة إرسال بريد التأكيد', 'dashboard_overview' => 'نظرة عامة', 'total_shipments' => 'إجمالي الشحنات', 'active_trucks' => 'الشاحنات النشطة', 'pending_approvals' => 'بانتظار الموافقة', 'revenue' => 'الإيرادات', 'recent_activity' => 'النشاط الأخير', 'view_all_shipments' => 'عرض كل الشحنات', 'view_all_users' => 'عرض كل المستخدمين', 'add_new' => 'إضافة جديد', 'export' => 'تصدير', 'import' => 'استيراد', 'print' => 'طباعة', 'copy' => 'نسخ', 'csv' => 'CSV', 'excel' => 'Excel', 'pdf' => 'PDF', 'search_results' => 'نتائج البحث', 'no_results' => 'لا توجد نتائج.', 'showing_entries' => 'عرض %s إلى %s من %s سجل', 'next_page' => 'التالي', 'prev_page' => 'السابق', 'first_page' => 'الأول', 'last_page' => 'الأخير', 'apply' => 'تطبيق', 'clear' => 'مسح', 'filter_by' => 'تصفية حسب', 'status_all' => 'كل الحالات', 'role_all' => 'كل الأدوار', 'date_range' => 'نطاق التاريخ', 'today' => 'اليوم', 'yesterday' => 'أمس', 'last_7_days' => 'آخر 7 أيام', 'last_30_days' => 'آخر 30 يوم', 'this_month' => 'هذا الشهر', 'last_month' => 'الشهر الماضي', 'custom_range' => 'نطاق مخصص', 'start_date' => 'تاريخ البدء', 'end_date' => 'تاريخ الانتهاء', 'to' => 'إلى', 'from' => 'من', 'subject' => 'الموضوع', 'message' => 'الرسالة', 'send_message' => 'إرسال الرسالة', 'reply' => 'رد', 'forward' => 'توجيه', 'mark_unread' => 'تحديد كغير مقروء', 'delete_selected' => 'حذف المحدد', 'archive' => 'أرشفة', 'spam' => 'بريد مزعج', 'trash' => 'سلة المهملات', 'compose' => 'إنشاء', 'inbox' => 'الوارد', 'sent' => 'المرسل', 'drafts' => 'المسودات', 'important' => 'مهم', 'starred' => 'مميز بنجمة', 'labels' => 'تسميات', 'add_label' => 'إضافة تسمية', 'remove_label' => 'إزالة تسمية', 'color' => 'اللون', 'description' => 'الوصف', 'edit_profile' => 'تعديل الملف الشخصي', 'change_avatar' => 'تغيير الصورة الرمزية', 'bio' => 'نبذة', 'location' => 'الموقع', 'website' => 'الموقع الإلكتروني', 'social_links' => 'روابط التواصل الاجتماعي', 'facebook' => 'فيسبوك', 'twitter' => 'تويتر', 'linkedin' => 'لينكد إن', 'instagram' => 'انستغرام', 'youtube' => 'يوتيوب', 'github' => 'جيت هب', 'save_changes' => 'حفظ التغييرات', 'discard_changes' => 'تجاهل التغييرات', 'unsaved_changes' => 'لديك تغييرات غير محفوظة.', 'stay_on_page' => 'البقاء في الصفحة', 'leave_page' => 'مغادرة الصفحة', 'confirm_action' => 'تأكيد الإجراء', 'action_cannot_undone' => 'لا يمكن التراجع عن هذا الإجراء.', 'type_confirm' => 'اكتب "CONFIRM" للمتابعة.', 'notifications_permission' => 'هل تسمح بالإشعارات؟', 'allow' => 'سماح', 'deny' => 'رفض', 'location_permission' => 'هل تسمح بالوصول للموقع؟', 'camera_permission' => 'هل تسمح بالوصول للكاميرا؟', 'mic_permission' => 'هل تسمح بالوصول للميكروفون؟', 'cookie_consent' => 'نستخدم ملفات تعريف الارتباط لتحسين تجربتك.', 'accept_all' => 'قبول الكل', 'reject_all' => 'رفض الكل', 'customize' => 'تخصيص', 'preferences' => 'التفضيلات', 'general' => 'عام', 'security' => 'الأمان', 'billing' => 'الفوترة', 'integrations' => 'التكاملات', 'api_keys' => 'مفاتيح API', 'generate_key' => 'توليد مفتاح', 'revoke_key' => 'إبطال مفتاح', 'webhook_url' => 'رابط Webhook', 'secret_key' => 'المفتاح السري', 'documentation' => 'التوثيق', 'support_ticket' => 'تذكرة دعم', 'open_ticket' => 'فتح تذكرة', 'ticket_id' => 'رقم التذكرة', 'priority' => 'الأولوية', 'low' => 'منخفض', 'medium' => 'متوسط', 'high' => 'عالي', 'critical' => 'حرج', 'status_open' => 'مفتوح', 'status_closed' => 'مغلق', 'status_pending' => 'قيد الانتظار', 'last_reply' => 'آخر رد', 'assigned_to' => 'مسند إلى', 'created_by' => 'أنشئ بواسطة', 'resolved_at' => 'تم الحل في', 'closed_at' => 'تاريخ الإغلاق', 'reopen' => 'إعادة فتح', 'close' => 'إغلاق', 'add_comment' => 'إضافة تعليق', 'attach_file' => 'إرفاق ملف', 'max_size' => 'الحجم الأقصى: %s', 'allowed_types' => 'الأنواع المسموحة: %s', 'drag_drop' => 'اسحب وأفلت الملفات هنا', 'browse' => 'تصفح', 'uploading' => 'جار الرفع...', 'completed' => 'مكتمل', 'failed' => 'فشل', 'retry' => 'إعادة المحاولة', 'cancel_upload' => 'إلغاء الرفع', 'remove' => 'إزالة', 'preview' => 'معاينة', 'zoom_in' => 'تكبير', 'zoom_out' => 'تصغير', 'rotate' => 'تدوير', 'fullscreen' => 'ملء الشاشة', 'print_preview' => 'معاينة الطباعة', 'download_pdf' => 'تحميل PDF', 'share' => 'مشاركة', 'copy_link' => 'نسخ الرابط', 'email_link' => 'إرسال الرابط بالبريد', 'embed' => 'تضمين', 'qrcode' => 'رمز QR', 'scan_qrcode' => 'مسح رمز QR', 'auth_code' => 'رمز المصادقة', '2fa' => 'المصادقة الثنائية', 'setup_2fa' => 'إعداد المصادقة الثنائية', 'disable_2fa' => 'تعطيل المصادقة الثنائية', 'enter_code' => 'أدخل الرمز', 'backup_codes' => 'رموز احتياطية', 'generate_codes' => 'توليد رموز', 'print_codes' => 'طباعة الرموز', 'recovery_email' => 'بريد الاسترداد', 'verify_phone' => 'تأكيد رقم الهاتف', 'sms_code' => 'رمز SMS', 'resend_code' => 'إعادة إرسال الرمز', 'code_sent' => 'تم إرسال الرمز.', 'phone_verified' => 'تم تأكيد رقم الهاتف.', 'country_code' => 'رمز الدولة', 'phone_number' => 'رقم الهاتف', 'address_line1' => 'العنوان 1', 'address_line2' => 'العنوان 2', 'city_state' => 'المدينة/المنطقة', 'postal_code' => 'الرمز البريدي', 'country_region' => 'الدولة/المنطقة', 'billing_address' => 'عنوان الفوترة', 'shipping_address' => 'عنوان الشحن', 'same_as_billing' => 'نفس عنوان الفوترة', 'add_address' => 'إضافة عنوان', 'edit_address' => 'تعديل عنوان', 'delete_address' => 'حذف عنوان', 'default_address' => 'العنوان الافتراضي', 'set_default' => 'تعيين كافتراضي', 'payment_method' => 'طريقة الدفع', 'credit_card' => 'بطاقة ائتمان', 'paypal' => 'باي بال', 'bank_transfer' => 'تحويل بنكي', 'cash_on_delivery' => 'الدفع عند الاستلام', 'card_number' => 'رقم البطاقة', 'expiry_date' => 'تاريخ الانتهاء', 'cvv' => 'رمز CVV', 'card_holder' => 'اسم حامل البطاقة', 'save_card' => 'حفظ البطاقة للاستخدام المستقبلي', 'transaction_history' => 'سجل المعاملات', 'invoice' => 'فاتورة', 'receipt' => 'إيصال', 'amount' => 'المبلغ', 'currency' => 'العملة', 'tax' => 'الضريبة', 'discount' => 'الخصم', 'subtotal' => 'المجموع الفرعي', 'total' => 'المجموع الكلي', 'promo_code' => 'الرمز الترويجي', 'apply_code' => 'تطبيق الرمز', 'invalid_code' => 'الرمز غير صالح.', 'checkout' => 'الدفع', 'place_order' => 'تأكيد الطلب', 'order_summary' => 'ملخص الطلب', 'cart' => 'سلة التسوق', 'empty_cart' => 'السلة فارغة.', 'continue_shopping' => 'متابعة التسوق', 'add_to_cart' => 'أضف إلى السلة', 'remove_from_cart' => 'إزالة من السلة', 'update_cart' => 'تحديث السلة', 'quantity' => 'الكمية', 'unit_price' => 'سعر الوحدة', 'total_price' => 'السعر الإجمالي', 'product_details' => 'تفاصيل المنتج', 'specifications' => 'المواصفات', 'reviews' => 'المراجعات', 'write_review' => 'اكتب مراجعة', 'rating' => 'التقييم', 'stars' => 'نجوم', 'related_products' => 'منتجات ذات صلة', 'wishlist' => 'قائمة الرغبات', 'add_to_wishlist' => 'أضف لقائمة الرغبات', 'remove_from_wishlist' => 'إزالة من قائمة الرغبات', 'compare' => 'مقارنة', 'add_to_compare' => 'أضف للمقارنة', 'clear_compare' => 'مسح المقارنة', 'compare_products' => 'مقارنة المنتجات', 'category' => 'الفئة', 'brand' => 'العلامة التجارية', 'model' => 'الموديل', 'sku' => 'SKU', 'availability' => 'التوفر', 'in_stock' => 'متوفر', 'out_of_stock' => 'غير متوفر', 'pre_order' => 'طلب مسبق', 'limited_stock' => 'كمية محدودة', 'new_arrival' => 'وصل حديثاً', 'best_seller' => 'الأكثر مبيعاً', 'featured' => 'متميز', 'sale' => 'تخفيضات', 'hot' => 'رائج', 'deal_of_day' => 'صفقة اليوم', 'timer_end' => 'العرض ينتهي في', 'days' => 'أيام', 'hours' => 'ساعات', 'minutes' => 'دقائق', 'seconds' => 'ثواني', 'subscribe_text' => 'Subscribe to our newsletter for latest updates.', 'follow_us' => 'Follow Us', 'app_download' => 'Download App', 'app_store' => 'App Store', 'google_play' => 'Google Play', 'secure_payment' => 'Secure Payment', 'fast_delivery' => 'Fast Delivery', '24_7_support' => '24/7 Support', 'money_back' => 'Money Back Guarantee', 'easy_returns' => 'Easy Returns', 'gift_cards' => 'Gift Cards', 'track_order' => 'Track Order', 'order_id' => 'Order ID', 'shipping_info' => 'Shipping Info', 'billing_info' => 'Billing Info', 'order_status' => 'Order Status', 'processing' => 'Processing', 'shipped' => 'Shipped', 'delivered' => 'Delivered', 'cancelled' => 'Cancelled', 'returned' => 'Returned', 'refunded' => 'Refunded', 'return_policy' => 'Return Policy', 'shipping_policy' => 'Shipping Policy', 'sitemap' => 'Sitemap', 'accessibility' => 'Accessibility', 'accessibility_statement' => 'Accessibility Statement', 'skip_to_content' => 'Skip to Content', 'high_contrast' => 'High Contrast', 'text_size' => 'Text Size', 'increase' => 'Increase', 'decrease' => 'Decrease', 'reset' => 'Reset', 'print_page' => 'Print Page', 'read_aloud' => 'Read Aloud', 'stop' => 'Stop', 'pause' => 'Pause', 'resume' => 'Resume', 'mute' => 'Mute', 'unmute' => 'Unmute', 'volume' => 'Volume', 'speed' => 'Speed', 'normal' => 'Normal', 'fast' => 'Fast', 'slow' => 'Slow', 'captions' => 'Captions', 'subtitles' => 'Subtitles', 'audio_desc' => 'Audio Description', 'keyboard_shortcuts' => 'Keyboard Shortcuts', 'help' => 'Help', 'close_menu' => 'Close Menu', 'open_menu' => 'Open Menu', 'menu' => 'Menu', 'navigation' => 'Navigation', 'breadcrumbs' => 'Breadcrumbs', 'pagination' => 'Pagination', 'modal' => 'Modal', 'dialog' => 'Dialog', 'tooltip' => 'Tooltip', 'popover' => 'Popover', 'alert' => 'Alert', 'notification' => 'Notification', 'toast' => 'Toast', 'banner' => 'Banner', 'sidebar' => 'Sidebar', 'footer' => 'Footer', 'header' => 'Header', 'main_content' => 'Main Content', 'admin_dashboard_title' => 'Admin Dashboard', 'wablas_server_url' => 'Wablas Server URL', 'wablas_api_token' => 'Wablas API Token', 'reg_title' => 'Create Account', 'reg_subtitle' => 'Sign up to get started', 'reg_success_pending' => 'Registration successful. Your account is pending approval.', 'reg_success' => 'Registration successful. You can now login.', 'role' => 'Role', 'shipper' => 'Shipper', 'truck_owner' => 'Truck Owner', 'email' => 'Email', 'password' => 'Password', 'phone' => 'Phone', 'country' => 'Country', 'select_country' => 'Select Country', 'city' => 'City', 'select_city' => 'Select City', 'address' => 'Address', 'shipper_details' => 'Shipper Details', 'company_name' => 'Company Name', 'truck_details' => 'Truck Details', 'truck_type' => 'Truck Type', 'load_capacity' => 'Load Capacity (Tons)', 'plate_no' => 'Plate Number', 'bank_account' => 'Bank Account', 'bank_name' => 'Bank Name', 'bank_branch' => 'Branch Name', 'id_card_front' => 'ID Card (Front)', 'id_card_back' => 'ID Card (Back)', 'truck_reg_front' => 'Truck Registration (Front)', 'truck_reg_back' => 'Truck Registration (Back)', 'truck_picture' => 'Truck Picture', 'create_account' => 'Create Account', 'back_to_admin' => 'Back to Admin', 'back_to_home' => 'Back to Home', 'total_revenue' => 'Total Revenue', 'shipments_analytics' => 'Shipments Analytics', 'export_csv' => 'Export CSV', 'status_posted' => 'تم النشر', 'status_offered' => 'تم تقديم عرض', 'status_confirmed' => 'مؤكدة', 'status_in_transit' => 'قيد النقل', 'status_delivered' => 'تم التوصيل', 'status_pending' => 'قيد الانتظار', 'status_active' => 'نشط', 'status_rejected' => 'مرفوض', 'status_unpaid' => 'غير مدفوع', 'status_paid' => 'مدفوع', 'payment_thawani' => 'ثواني', 'payment_bank' => 'تحويل بنكي', 'currency_symbol' => 'ر.ع.', 'total_shippers' => 'إجمالي الشاحنين', 'active_shipments' => 'الشحنات النشطة', 'total_truck_owners' => 'إجمالي أصحاب الشاحنات', 'admin_dashboard' => 'لوحة تحكم المسؤول', 'overview_performance' => 'النظرة العامة والأداء', 'no_shipments' => 'لم يتم العثور على شحنات.', 'shipment' => 'الشحنة', 'route' => 'المسار', 'action' => 'الإجراء', 'manage_countries' => 'إدارة الدول', 'add_remove_countries' => 'إضافة/إزالة الدول', 'manage_cities' => 'إدارة المدن', 'configure_cities' => 'إعداد المدن', 'register_user' => 'تسجيل مستخدم', 'manually_onboard' => 'إضافة مستخدم يدوياً', 'company_profile' => 'ملف الشركة', 'update_branding' => 'تحديث الهوية', 'summary_report' => 'تقرير ملخص', 'view_analytics' => 'عرض التحليلات' ] ]; function t(string $key): string { global $translations, $lang; return $translations[$lang][$key] ?? $key; } function e($value): string { return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8'); } function ensure_schema(): void { // Make sure we have a connection if (!db()) return; try { db()->exec("ALTER TABLE shipments ADD COLUMN pod_path VARCHAR(255) NULL AFTER offer_owner"); } catch (Exception $e) {} db()->exec(" CREATE TABLE IF NOT EXISTS landing_sections ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, subtitle TEXT NULL, content TEXT NULL, image_path VARCHAR(255) NULL, layout ENUM('text_left', 'text_right', 'center') NOT NULL DEFAULT 'text_left', button_text VARCHAR(100) NULL, button_link VARCHAR(255) NULL, section_order INT NOT NULL DEFAULT 0, is_active TINYINT(1) NOT NULL DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; "); try { db()->exec("ALTER TABLE landing_sections ADD COLUMN title_ar VARCHAR(255) NULL AFTER title"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE landing_sections ADD COLUMN subtitle_ar TEXT NULL AFTER subtitle"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE landing_sections ADD COLUMN content_ar TEXT NULL AFTER content"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE landing_sections ADD COLUMN button_text_ar VARCHAR(100) NULL AFTER button_text"); } catch (Exception $e) {} $sql = <<exec($sql); try { db()->exec("ALTER TABLE users ADD COLUMN status ENUM('pending','active','rejected') NOT NULL DEFAULT 'active'"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE users ADD COLUMN profile_picture VARCHAR(255) NULL AFTER full_name"); } catch (Exception $e) {} // Payment fields for shipments try { db()->exec("ALTER TABLE shipments ADD COLUMN platform_fee DECIMAL(10,2) DEFAULT 0.00 AFTER offer_price"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE shipments ADD COLUMN total_price DECIMAL(10,2) DEFAULT 0.00 AFTER platform_fee"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE shipments ADD COLUMN payment_status ENUM('unpaid', 'paid') DEFAULT 'unpaid' AFTER status"); } catch (Exception $e) {} // Truck owner documents try { db()->exec("ALTER TABLE users ADD COLUMN id_card_front VARCHAR(255) NULL"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE users ADD COLUMN id_card_back VARCHAR(255) NULL"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE users ADD COLUMN truck_reg_front VARCHAR(255) NULL"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE users ADD COLUMN truck_reg_back VARCHAR(255) NULL"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE users ADD COLUMN truck_picture VARCHAR(255) NULL"); } catch (Exception $e) {} try { db()->exec("CREATE TABLE IF NOT EXISTS notifications ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, title VARCHAR(255) NOT NULL, message TEXT NOT NULL, is_read TINYINT(1) DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); } catch (Exception $e) {} // Add bank fields to users table if they don't exist try { db()->exec("ALTER TABLE users ADD COLUMN bank_name VARCHAR(100) NULL AFTER truck_picture"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE users ADD COLUMN bank_branch VARCHAR(100) NULL AFTER bank_name"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE users ADD COLUMN bank_account VARCHAR(100) NULL AFTER bank_branch"); } catch (Exception $e) {} // Create notification_templates table try { db()->exec("CREATE TABLE IF NOT EXISTS notification_templates ( id INT AUTO_INCREMENT PRIMARY KEY, code VARCHAR(50) NOT NULL UNIQUE, name VARCHAR(100) NOT NULL, subject VARCHAR(255) NOT NULL, body TEXT NOT NULL, sms_body TEXT NULL, variables TEXT NULL COMMENT 'Comma separated list of available variables', is_active TINYINT(1) DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP )"); } catch (Exception $e) {} // Settings table try { db()->exec("CREATE TABLE IF NOT EXISTS settings ( id INT AUTO_INCREMENT PRIMARY KEY, setting_key VARCHAR(50) NOT NULL UNIQUE, setting_value TEXT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP )"); } catch (Exception $e) {} // Permissions tables try { db()->exec("CREATE TABLE IF NOT EXISTS permissions ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL UNIQUE, description VARCHAR(255) NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); db()->exec("CREATE TABLE IF NOT EXISTS user_permissions ( user_id INT NOT NULL, permission_id INT NOT NULL, PRIMARY KEY (user_id, permission_id), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE )"); } catch (Exception $e) {} // Add user_id to shipments try { db()->exec("ALTER TABLE shipments ADD COLUMN user_id INT NULL AFTER id"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE shipments ADD INDEX (user_id)"); } catch (Exception $e) {} // Add pod_file to shipments try { db()->exec("ALTER TABLE shipments ADD COLUMN pod_file VARCHAR(255) NULL AFTER status"); } catch (Exception $e) {} } function get_setting(string $key, $default = null) { // Try to get from database first try { $stmt = db()->prepare("SELECT setting_value FROM settings WHERE setting_key = ?"); $stmt->execute([$key]); $val = $stmt->fetchColumn(); if ($val !== false) { return $val; } } catch (Throwable $e) {} return $default; } function require_role(string $role): void { if (!isset($_SESSION['user_id']) || !isset($_SESSION['user_role'])) { header('Location: login.php'); exit; } if ($_SESSION['user_role'] !== $role && $_SESSION['user_role'] !== 'admin') { // Admin can access everything http_response_code(403); die('Access Denied'); } } function get_flash(): ?array { if (isset($_SESSION['flash'])) { $flash = $_SESSION['flash']; unset($_SESSION['flash']); return $flash; } return null; } function set_flash(string $type, string $message): void { $_SESSION['flash'] = ['type' => $type, 'message' => $message]; } function url_with_lang(string $url, array $params = []): string { global $lang; $params['lang'] = $lang; $query = http_build_query($params); if (strpos($url, '?') !== false) { return $url . '&' . $query; } return $url . '?' . $query; } function current_url_with_lang(string $targetLang): string { $params = $_GET; $params['lang'] = $targetLang; $query = http_build_query($params); $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); return $path . '?' . $query; } function status_label(string $status): string { $key = 'status_' . $status; return t($key); } function format_currency(float $amount): string { return number_format($amount, 2) . ' ' . t('currency_symbol'); } function csrf_token(): string { if (empty($_SESSION['csrf_token'])) { try { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } catch (Exception $e) { $_SESSION['csrf_token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } return $_SESSION['csrf_token']; } function csrf_field(): string { return ''; } function validate_csrf_token(): void { if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!isset($_POST['csrf_token']) || !hash_equals(csrf_token(), $_POST['csrf_token'])) { http_response_code(403); die(t('csrf_error')); } } }