@@ -129,22 +129,22 @@ render_header('Login / Reset Password', 'login');
-
Reset Password
-
Enter your email and we'll send you a link to reset your password
+
= e(t('reset_password_title')) ?>
+
= e(t('reset_password_subtitle')) ?>
diff --git a/patch_app_translations.php b/patch_app_translations.php
new file mode 100644
index 0000000..129aa9c
--- /dev/null
+++ b/patch_app_translations.php
@@ -0,0 +1,369 @@
+ 'CargoLink',
+ 'nav_home' => 'Overview',
+ 'nav_shipper' => 'Shipper Desk',
+ 'nav_owner' => 'Truck Owner Desk',
+ 'nav_admin' => 'Admin Panel',
+ 'hero_title' => 'Move cargo faster with verified trucks.',
+ 'hero_subtitle' => 'Post shipments, collect offers, and pay via Thawani or bank transfer. Built for local and nearby cross-border moves.',
+ 'hero_tagline' => 'Multilingual Logistics Marketplace',
+ 'register_shipper' => 'Register as Shipper',
+ 'register_owner' => 'Register as Truck Owner',
+ 'cta_shipper' => 'Post a shipment',
+ 'cta_owner' => 'Find loads',
+ 'cta_admin' => 'Open admin',
+ 'stats_shipments' => 'Shipments posted',
+ 'stats_offers' => 'Active offers',
+ 'stats_confirmed' => 'Confirmed trips',
+ 'section_workflow' => 'How it works',
+ 'recent_shipments' => 'Recent shipments',
+ 'step_post' => 'Shipper posts cargo details and preferred payment.',
+ 'step_offer' => 'Truck owners respond with their best rate.',
+ 'step_confirm' => 'Admin confirms booking and status.',
+ 'step_confirm_desc' => 'Secure booking and track the delivery until completion.',
+ 'shipper_dashboard' => 'Shipper Dashboard',
+ 'new_shipment' => 'Create shipment',
+ 'shipper_name' => 'Shipper name',
+ 'shipper_company' => 'Company',
+ 'origin' => 'Origin city',
+ 'destination' => 'Destination city',
+ 'cargo' => 'Cargo description',
+ 'cargo_placeholder' => 'e.g. 20 Pallets of Electronics',
+ 'weight' => 'Weight (tons)',
+ 'pickup_date' => 'Pickup date',
+ 'delivery_date' => 'Delivery date',
+ 'payment_method' => 'Payment method',
+ 'payment_thawani' => 'Thawani online payment',
+ 'payment_bank' => 'Bank transfer',
+ 'submit_shipment' => 'Submit shipment',
+ 'shipments_list' => 'Your latest shipments',
+ 'status' => 'Status',
+ 'offer' => 'Best offer',
+ 'actions' => 'Actions',
+ 'view' => 'View',
+ 'owner_dashboard' => 'Truck Owner Dashboard',
+ 'available_shipments' => 'Available shipments',
+ 'offer_price' => 'Offer price',
+ 'offer_owner' => 'Truck owner name',
+ 'submit_offer' => 'Send offer',
+ 'admin_dashboard' => 'Admin Dashboard',
+ 'update_status' => 'Update status',
+ 'save' => 'Save',
+ 'shipment_detail' => 'Shipment detail',
+ 'created_at' => 'Created',
+ 'best_offer' => 'Best offer',
+ 'assign_owner' => 'Assigned owner',
+ 'no_shipments' => 'No shipments yet. Create the first one to get started.',
+ 'no_offers' => 'No offers yet.',
+ 'success_shipment' => 'Shipment posted successfully.',
+ 'success_offer' => 'Offer submitted to the shipper.',
+ 'success_status' => 'Status updated.',
+ 'error_required' => 'Please fill in all required fields.',
+ 'error_invalid' => 'Please enter valid values.',
+ 'status_posted' => 'Posted',
+ 'status_offered' => 'Offered',
+ 'status_confirmed' => 'Confirmed',
+ 'status_in_transit' => 'In transit',
+ 'status_delivered' => 'Delivered',
+ 'footer_note' => 'This is the initial MVP slice. Payments are not yet connected.',
+ 'marketing_title_1' => 'For Shippers',
+ 'marketing_desc_1' => 'Find the right truck for your cargo quickly and securely. Post your load and get offers instantly.',
+ 'marketing_title_2' => 'For Truck Owners',
+ 'marketing_desc_2' => 'Maximize your earnings and eliminate empty miles. Browse available shipments and offer your rate.',
+ 'motivation_phrase' => 'Empowering the logistics of tomorrow.',
+ 'why_choose_us' => 'Why Choose CargoLink?',
+ 'feature_1_title' => 'Fast Matching',
+ 'feature_1_desc' => 'Connect with available trucks or shipments in minutes.',
+ 'feature_2_title' => 'Secure Payments',
+ 'feature_2_desc' => 'Your transactions are protected with security.',
+ 'feature_3_title' => 'Verified Users',
+ 'feature_3_desc' => 'We verify all truck owners to ensure peace of mind.',
+ 'view_faq' => 'View FAQ',
+ 'faq_title' => 'Have Questions?',
+ 'faq_subtitle' => 'Check out our Frequently Asked Questions to learn more about how our platform works.',
+ 'motivation_title' => 'Ready to transform your logistics?',
+ 'motivation_subtitle' => 'Join our platform today to find reliable trucks or secure the best shipments in the market.',
+ 'company' => 'Company',
+ 'about_us' => 'About Us',
+ 'careers' => 'Careers',
+ 'contact' => 'Contact',
+ 'resources' => 'Resources',
+ 'help_center' => 'Help Center / FAQ',
+ 'terms_of_service' => 'Terms of Service',
+ 'privacy_policy' => 'Privacy Policy',
+ 'language' => 'Language',
+ 'all_rights_reserved' => 'All rights reserved.',
+ 'dashboard' => 'Dashboard',
+ 'settings' => 'Settings',
+ 'company_setting' => 'Company Setting',
+ 'integrations' => 'Integrations',
+ 'locations' => 'Locations',
+ 'countries' => 'Countries',
+ 'cities' => 'Cities',
+ 'users' => 'Users',
+ 'shippers' => 'Shippers',
+ 'truck_owners' => 'Truck Owners',
+ 'user_registration' => 'User Registration',
+ 'pages' => 'Pages',
+ 'faqs' => 'FAQs',
+ 'landing_pages' => 'Landing Pages',
+ 'login_title' => 'Welcome Back',
+ 'login_subtitle' => 'Sign in to your account to continue',
+ 'email_address' => 'Email address',
+ 'email_placeholder' => 'name@example.com',
+ 'password' => 'Password',
+ 'forgot_password' => 'Forgot password?',
+ 'password_placeholder' => 'Enter your password',
+ 'sign_in' => 'Sign In',
+ 'dont_have_account' => 'Don\'t have an account?',
+ 'register_now' => 'Register now',
+ 'reset_password_title' => 'Reset Password',
+ 'reset_password_subtitle' => 'Enter your email and we\'ll send you a link to reset your password',
+ 'send_reset_link' => 'Send Reset Link',
+ 'back_to_login' => 'Back to login',
+ 'invalid_image' => 'Invalid image format. Please upload JPG, PNG, GIF, or WEBP.',
+ 'upload_failed' => 'Failed to save uploaded file.',
+ 'profile_updated' => 'Profile updated successfully.',
+ 'my_profile' => 'My Profile',
+ 'profile_picture' => 'Profile Picture',
+ 'change_picture' => 'Change Picture',
+ 'picture_hint' => 'JPG, PNG, or GIF up to 5MB',
+ 'full_name' => 'Full Name',
+ 'email_hint' => 'Email address cannot be changed.',
+ 'account_role' => 'Account Role',
+ 'save_changes' => 'Save Changes',
+ 'reg_title' => 'Create your logistics account',
+ 'reg_subtitle' => 'Shippers and truck owners can self-register with full profile details.',
+ 'reg_success_pending' => 'Registration completed successfully. Your account is pending admin approval.',
+ 'reg_success' => 'Registration completed successfully.',
+ 'role' => 'Role',
+ 'shipper' => 'Shipper',
+ 'truck_owner' => 'Truck Owner',
+ 'email' => 'Email',
+ '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 owner details',
+ 'truck_type' => 'Truck type',
+ 'load_capacity' => 'Load capacity (tons)',
+ 'plate_no' => 'Plate number',
+ 'bank_account' => 'Bank Account / IBAN',
+ 'bank_name' => 'Bank Name',
+ 'bank_branch' => 'Bank Branch',
+ 'id_card_front' => 'ID card (Front Face)',
+ 'id_card_back' => 'ID card (Back Face)',
+ 'truck_reg_front' => 'Truck Registration (Front Face)',
+ 'truck_reg_back' => 'Truck Registration (Back Face)',
+ 'truck_picture' => 'Clear Truck Photo (showing plate number)',
+ 'create_account' => 'Create account',
+ 'back_to_admin' => 'Back to admin',
+ 'welcome_back' => 'Welcome to your dashboard. Manage your cargo shipments here.',
+ 'total_shipments_posted' => 'Total Shipments',
+ 'active_shipments' => 'Active Shipments',
+ 'delivered_shipments' => 'Delivered Shipments',
+ 'route_label' => 'Route',
+ 'total_label' => 'total',
+ 'welcome_back_owner' => 'Find loads and submit your best rate.',
+ 'total_offers' => 'Total Offers',
+ 'won_shipments' => 'Won Shipments',
+];
+
+$translations_ar = [
+ 'app_name' => 'CargoLink',
+ 'nav_home' => 'نظرة عامة',
+ 'nav_shipper' => 'لوحة الشاحن',
+ 'nav_owner' => 'لوحة مالك الشاحنة',
+ 'nav_admin' => 'لوحة الإدارة',
+ 'hero_title' => 'انقل شحنتك بسرعة مع شاحنات موثوقة.',
+ 'hero_subtitle' => 'أنشئ شحنة، استلم عروضاً، وادفع عبر ثواني أو التحويل البنكي.',
+ 'hero_tagline' => 'منصة لوجستية متعددة اللغات',
+ 'register_shipper' => 'التسجيل كشاحن',
+ 'register_owner' => 'التسجيل كمالك شاحنة',
+ 'cta_shipper' => 'إنشاء شحنة',
+ 'cta_owner' => 'البحث عن الشحنات',
+ 'cta_admin' => 'الدخول للإدارة',
+ 'stats_shipments' => 'الشحنات المنشورة',
+ 'stats_offers' => 'العروض الحالية',
+ 'stats_confirmed' => 'الرحلات المؤكدة',
+ 'section_workflow' => 'طريقة العمل',
+ 'recent_shipments' => 'أحدث الشحنات',
+ 'step_post' => 'يقوم الشاحن بإدخال تفاصيل الشحنة وطريقة الدفع.',
+ 'step_offer' => 'يرسل أصحاب الشاحنات أفضل عروضهم.',
+ 'step_confirm' => 'تؤكد الإدارة الحجز وتحدث الحالة.',
+ 'step_confirm_desc' => 'حجز آمن وتتبع التسليم حتى الانتهاء.',
+ 'shipper_dashboard' => 'لوحة الشاحن',
+ 'new_shipment' => 'إنشاء شحنة',
+ 'shipper_name' => 'اسم الشاحن',
+ 'shipper_company' => 'الشركة',
+ 'origin' => 'مدينة الانطلاق',
+ 'destination' => 'مدينة الوصول',
+ 'cargo' => 'وصف الحمولة',
+ 'cargo_placeholder' => 'مثال: 20 منصة إلكترونيات',
+ 'weight' => 'الوزن (طن)',
+ 'pickup_date' => 'تاريخ الاستلام',
+ 'delivery_date' => 'تاريخ التسليم',
+ 'payment_method' => 'طريقة الدفع',
+ 'payment_thawani' => 'الدفع الإلكتروني عبر ثواني',
+ 'payment_bank' => 'تحويل بنكي',
+ 'submit_shipment' => 'إرسال الشحنة',
+ 'shipments_list' => 'أحدث الشحنات',
+ 'status' => 'الحالة',
+ 'offer' => 'أفضل عرض',
+ 'actions' => 'إجراءات',
+ 'view' => 'عرض',
+ 'owner_dashboard' => 'لوحة مالك الشاحنة',
+ 'available_shipments' => 'الشحنات المتاحة',
+ 'offer_price' => 'سعر العرض',
+ 'offer_owner' => 'اسم مالك الشاحنة',
+ 'submit_offer' => 'إرسال العرض',
+ 'admin_dashboard' => 'لوحة الإدارة',
+ 'update_status' => 'تحديث الحالة',
+ 'save' => 'حفظ',
+ 'shipment_detail' => 'تفاصيل الشحنة',
+ 'created_at' => 'تم الإنشاء',
+ 'best_offer' => 'أفضل عرض',
+ 'assign_owner' => 'المالك المعتمد',
+ 'no_shipments' => 'لا توجد شحنات بعد. ابدأ بإنشاء أول شحنة.',
+ 'no_offers' => 'لا توجد عروض بعد.',
+ 'success_shipment' => 'تم نشر الشحنة بنجاح.',
+ 'success_offer' => 'تم إرسال العرض إلى الشاحن.',
+ 'success_status' => 'تم تحديث الحالة.',
+ 'error_required' => 'يرجى تعبئة جميع الحقول المطلوبة.',
+ 'error_invalid' => 'يرجى إدخال قيم صحيحة.',
+ 'status_posted' => 'منشورة',
+ 'status_offered' => 'بعرض',
+ 'status_confirmed' => 'مؤكدة',
+ 'status_in_transit' => 'قيد النقل',
+ 'status_delivered' => 'تم التسليم',
+ 'footer_note' => 'هذه هي النسخة الأولية. الدفع غير متصل بعد.',
+ 'marketing_title_1' => 'للشاحنين',
+ 'marketing_desc_1' => 'ابحث عن الشاحنة المناسبة لحمولتك بسرعة وأمان.',
+ 'marketing_title_2' => 'لأصحاب الشاحنات',
+ 'marketing_desc_2' => 'عظّم أرباحك وتجنب العودة فارغاً.',
+ 'motivation_phrase' => 'تمكين الخدمات اللوجستية للمستقبل.',
+ 'why_choose_us' => 'لماذا تختار كارجو لينك؟',
+ 'feature_1_title' => 'مطابقة سريعة',
+ 'feature_1_desc' => 'تواصل مع الشاحنات المتاحة في دقائق.',
+ 'feature_2_title' => 'مدفوعات آمنة',
+ 'feature_2_desc' => 'معاملاتك محمية بأعلى معايير الأمان.',
+ 'feature_3_title' => 'مستخدمون موثوقون',
+ 'feature_3_desc' => 'نقوم بالتحقق من جميع أصحاب الشاحنات لضمان راحتك.',
+ 'view_faq' => 'عرض الأسئلة الشائعة',
+ 'faq_title' => 'لديك أسئلة؟',
+ 'faq_subtitle' => 'اطلع على الأسئلة الشائعة لمعرفة المزيد حول كيفية عمل منصتنا.',
+ 'motivation_title' => 'هل أنت مستعد لتحويل خدماتك اللوجستية؟',
+ 'motivation_subtitle' => 'انضم إلى منصتنا اليوم للعثور على شاحنات موثوقة أو تأمين أفضل الشحنات في السوق.',
+ 'company' => 'الشركة',
+ 'about_us' => 'معلومات عنا',
+ 'careers' => 'الوظائف',
+ 'contact' => 'اتصل بنا',
+ 'resources' => 'الموارد',
+ 'help_center' => 'مركز المساعدة / الأسئلة الشائعة',
+ 'terms_of_service' => 'شروط الخدمة',
+ 'privacy_policy' => 'سياسة الخصوصية',
+ 'language' => 'اللغة',
+ 'all_rights_reserved' => 'جميع الحقوق محفوظة.',
+ 'dashboard' => 'لوحة القيادة',
+ 'settings' => 'الإعدادات',
+ 'company_setting' => 'إعدادات الشركة',
+ 'integrations' => 'التكاملات',
+ 'locations' => 'المواقع',
+ 'countries' => 'البلدان',
+ 'cities' => 'المدن',
+ 'users' => 'المستخدمون',
+ 'shippers' => 'الشاحنون',
+ 'truck_owners' => 'أصحاب الشاحنات',
+ 'user_registration' => 'تسجيل المستخدم',
+ 'pages' => 'الصفحات',
+ 'faqs' => 'الأسئلة الشائعة',
+ 'landing_pages' => 'صفحات الهبوط',
+ 'login_title' => 'مرحبًا بعودتك',
+ 'login_subtitle' => 'قم بتسجيل الدخول إلى حسابك للمتابعة',
+ 'email_address' => 'البريد الإلكتروني',
+ 'email_placeholder' => 'name@example.com',
+ 'password' => 'كلمة المرور',
+ 'forgot_password' => 'هل نسيت كلمة المرور؟',
+ 'password_placeholder' => 'أدخل كلمة المرور',
+ 'sign_in' => 'تسجيل الدخول',
+ 'dont_have_account' => 'ليس لديك حساب؟',
+ 'register_now' => 'سجل الآن',
+ 'reset_password_title' => 'إعادة تعيين كلمة المرور',
+ 'reset_password_subtitle' => 'أدخل بريدك الإلكتروني وسنرسل لك رابطًا لإعادة تعيين كلمة المرور',
+ 'send_reset_link' => 'إرسال رابط إعادة التعيين',
+ 'back_to_login' => 'العودة لتسجيل الدخول',
+ 'invalid_image' => 'صيغة صورة غير صالحة. يرجى تحميل JPG أو PNG أو GIF أو WEBP.',
+ 'upload_failed' => 'فشل في حفظ الملف المحمل.',
+ 'profile_updated' => 'تم تحديث الملف الشخصي بنجاح.',
+ 'my_profile' => 'ملفي الشخصي',
+ 'profile_picture' => 'صورة الملف الشخصي',
+ 'change_picture' => 'تغيير الصورة',
+ 'picture_hint' => 'JPG، PNG، أو GIF حتى 5 ميغابايت',
+ 'full_name' => 'الاسم الكامل',
+ 'email_hint' => 'لا يمكن تغيير عنوان البريد الإلكتروني.',
+ 'account_role' => 'دور الحساب',
+ 'save_changes' => 'حفظ التغييرات',
+ 'reg_title' => 'أنشئ حسابك اللوجستي',
+ 'reg_subtitle' => 'يمكن للشاحنين وأصحاب الشاحنات التسجيل الذاتي ببيانات الملف الشخصي الكاملة.',
+ 'reg_success_pending' => 'اكتمل التسجيل بنجاح. حسابك في انتظار موافقة الإدارة.',
+ 'reg_success' => 'اكتمل التسجيل بنجاح.',
+ 'role' => 'الدور',
+ 'shipper' => 'شاحن',
+ 'truck_owner' => 'مالك شاحنة',
+ 'email' => 'البريد الإلكتروني',
+ 'phone' => 'الهاتف',
+ 'country' => 'البلد',
+ 'select_country' => 'اختر البلد',
+ 'city' => 'المدينة',
+ 'select_city' => 'اختر المدينة',
+ 'address' => 'العنوان',
+ 'shipper_details' => 'تفاصيل الشاحن',
+ 'company_name' => 'اسم الشركة',
+ 'truck_details' => 'تفاصيل مالك الشاحنة',
+ 'truck_type' => 'نوع الشاحنة',
+ 'load_capacity' => 'سعة الحمولة (طن)',
+ 'plate_no' => 'رقم اللوحة',
+ 'bank_account' => 'الحساب البنكي / الآيبان',
+ 'bank_name' => 'اسم البنك',
+ 'bank_branch' => 'فرع البنك',
+ 'id_card_front' => 'البطاقة الشخصية (الوجه الأمامي)',
+ 'id_card_back' => 'البطاقة الشخصية (الوجه الخلفي)',
+ 'truck_reg_front' => 'تسجيل الشاحنة (الوجه الأمامي)',
+ 'truck_reg_back' => 'تسجيل الشاحنة (الوجه الخلفي)',
+ 'truck_picture' => 'صورة واضحة للشاحنة (تظهر رقم اللوحة)',
+ 'create_account' => 'إنشاء حساب',
+ 'back_to_admin' => 'العودة للإدارة',
+ 'welcome_back' => 'مرحبًا بك في لوحة القيادة الخاصة بك. قم بإدارة شحناتك هنا.',
+ 'total_shipments_posted' => 'إجمالي الشحنات',
+ 'active_shipments' => 'الشحنات النشطة',
+ 'delivered_shipments' => 'الشحنات المسلمة',
+ 'route_label' => 'المسار',
+ 'total_label' => 'المجموع',
+ 'welcome_back_owner' => 'ابحث عن الأحمال وقدم أفضل سعر لديك.',
+ 'total_offers' => 'إجمالي العروض',
+ 'won_shipments' => 'الشحنات الفائزة',
+];
+
+$trans_str_en = var_export($translations_en, true);
+$trans_str_ar = var_export($translations_ar, true);
+
+$new_translations = '$translations = [
+ "en" => ' . $trans_str_en . ',
+ "ar" => ' . $trans_str_ar . '
+];';
+
+// Find where $translations array starts and ends.
+// In the current file it starts at '$translations = [' and ends before 'function t('
+$pattern = '/\$translations\s*=\s*\[.*?(?=\nfunction t\(\))/s';
+$content = preg_replace($pattern, $new_translations . "\n\n", $content);
+
+file_put_contents('includes/app.php', $content);
+echo "Updated translations in app.php\n";
+?>
diff --git a/patch_lines.php b/patch_lines.php
new file mode 100644
index 0000000..3c2eea5
--- /dev/null
+++ b/patch_lines.php
@@ -0,0 +1,23 @@
+ $line) {
+ if (strpos($line, '$translations = [') === 0) {
+ $start = $i;
+ }
+ if (strpos($line, 'function t(') === 0) {
+ $end = $i;
+ break;
+ }
+}
+if ($start !== -1 && $end !== -1) {
+ $new_content = array_slice($lines, 0, $start);
+ $new_content[] = file_get_contents('new_trans.txt');
+ $new_content = array_merge($new_content, array_slice($lines, $end));
+ file_put_contents('includes/app.php', implode("", $new_content));
+ echo "Replaced lines $start to $end\n";
+} else {
+ echo "Could not find start/end\n";
+}
+?>
diff --git a/profile.php b/profile.php
index c45c4a4..0f66b99 100644
--- a/profile.php
+++ b/profile.php
@@ -39,7 +39,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'updat
finfo_close($fileInfo);
if (!in_array($mimeType, $allowedTypes)) {
- $errors[] = "Invalid image format. Please upload JPG, PNG, GIF, or WEBP.";
+ $errors[] = t('invalid_image');
} else {
$uploadDir = __DIR__ . '/uploads/profiles/';
if (!is_dir($uploadDir)) {
@@ -53,7 +53,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'updat
if (move_uploaded_file($_FILES['profile_picture']['tmp_name'], $destination)) {
$profilePicPath = '/uploads/profiles/' . $filename;
} else {
- $errors[] = "Failed to save uploaded file.";
+ $errors[] = t('upload_failed');
}
}
}
@@ -66,7 +66,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'updat
':pic' => $profilePicPath,
':id' => $userId
]);
- set_flash('success', "Profile updated successfully.");
+ set_flash('success', t('profile_updated'));
header("Location: " . url_with_lang('profile.php'));
exit;
} catch (Throwable $e) {
@@ -75,7 +75,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'updat
}
}
-render_header('My Profile', 'profile');
+render_header(t('my_profile'), 'profile');
$flash = get_flash();
?>
@@ -84,7 +84,7 @@ $flash = get_flash();
-
My Profile
+ = e(t('my_profile')) ?>
@@ -109,39 +109,39 @@ $flash = get_flash();
-
 ?>)
+
-
-
JPG, PNG, or GIF up to 5MB
+
= e(t('picture_hint')) ?>
- Full Name
+ = e(t('full_name')) ?>
-
Email Address
+
= e(t('email_address')) ?>
-
Email address cannot be changed.
+
= e(t('email_hint')) ?>
- Account Role
+ = e(t('account_role')) ?>
diff --git a/register.php b/register.php
index bc94614..47db03b 100644
--- a/register.php
+++ b/register.php
@@ -230,16 +230,16 @@ render_header('Shipper & Truck Owner Registration');
?>
-
Create your logistics account
-
Shippers and truck owners can self-register with full profile details.
+
= e(t('reg_title')) ?>
+
= e(t('reg_subtitle')) ?>
-
Registration completed successfully. Your account is pending admin approval.
+
= e(t('reg_success_pending')) ?>
-
Registration completed successfully.
+
= e(t('reg_success')) ?>
@@ -249,32 +249,32 @@ render_header('Shipper & Truck Owner Registration');
@@ -370,7 +370,7 @@ function syncCities() {
const countryId = document.getElementById('country_id').value;
const citySelect = document.getElementById('city_id');
const selectedValue = citySelect.dataset.selected || '';
- citySelect.innerHTML = '
';
+ citySelect.innerHTML = '
';
allCities.forEach((city) => {
if (String(city.country_id) !== String(countryId)) {
diff --git a/shipment_detail.php b/shipment_detail.php
index 46dd63a..f865f5b 100644
--- a/shipment_detail.php
+++ b/shipment_detail.php
@@ -39,6 +39,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'submi
}
$flash = get_flash();
+$isAdmin = ($_SESSION['user_role'] ?? '') === 'admin';
render_header(t('shipment_detail'));
?>
@@ -46,6 +47,13 @@ render_header(t('shipment_detail'));
= e(t('no_shipments')) ?>
+
@@ -100,8 +108,17 @@ render_header(t('shipment_detail'));
= $shipment['offer_price'] ? e($shipment['offer_price'] . ' / ' . ($shipment['offer_owner'] ?? '')) : e(t('no_offers')) ?>