false, 'message' => 'Invalid ID']); exit; } header('Location: admin_truck_owners.php'); exit; } $errors = []; $flash = null; // Fetch Truck Owner Profile $stmt = db()->prepare(" SELECT u.id, u.email, u.full_name, u.status, u.role, p.phone, p.address_line, p.country_id, p.city_id, p.bank_account, p.bank_name, p.bank_branch, p.id_card_path, p.is_company FROM users u LEFT JOIN truck_owner_profiles p ON u.id = p.user_id WHERE u.id = ? AND u.role = 'truck_owner' "); $stmt->execute([$userId]); $owner = $stmt->fetch(); $trucks = db()->prepare("SELECT * FROM trucks WHERE user_id = ?"); $trucks->execute([$userId]); $ownerTrucks = $trucks->fetchAll(); if (!$owner) { if ($isAjax) { echo json_encode(['success' => false, 'message' => 'Owner not found']); exit; } header('Location: admin_truck_owners.php'); exit; } $countries = db()->query("SELECT id, name_en, name_ar FROM countries ORDER BY name_en ASC")->fetchAll(); $cities = db()->query("SELECT id, country_id, name_en, name_ar FROM cities ORDER BY name_en ASC")->fetchAll(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { validate_csrf_token(); if (isset($_POST['approve_truck'])) { $truckId = (int)$_POST['truck_id']; db()->prepare("UPDATE trucks SET is_approved = 1 WHERE id = ? AND user_id = ?")->execute([$truckId, $userId]); $flash = 'Truck approved successfully.'; } elseif (isset($_POST['reject_truck'])) { $truckId = (int)$_POST['truck_id']; db()->prepare("UPDATE trucks SET is_approved = 0 WHERE id = ? AND user_id = ?")->execute([$truckId, $userId]); $flash = 'Truck status set to unapproved.'; } else { $fullName = trim($_POST['full_name'] ?? ''); $email = trim($_POST['email'] ?? ''); $phone = trim($_POST['phone'] ?? ''); $countryId = (int)($_POST['country_id'] ?? 0); $cityId = (int)($_POST['city_id'] ?? 0); $addressLine = trim($_POST['address_line'] ?? ''); $status = trim($_POST['status'] ?? ''); $password = $_POST['password'] ?? ''; $bankAccount = trim($_POST['bank_account'] ?? ''); $bankName = trim($_POST['bank_name'] ?? ''); $bankBranch = trim($_POST['bank_branch'] ?? ''); $isCompany = isset($_POST['is_company']) ? 1 : 0; if ($fullName === '') $errors[] = 'Full name is required.'; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'Valid email is required.'; if ($phone === '') $errors[] = 'Phone number is required.'; if (!in_array($status, ['pending', 'active', 'rejected'], true)) $errors[] = 'Invalid status.'; if ($countryId <= 0 || $cityId <= 0) { $errors[] = 'Please select country and city.'; } if (!$errors) { try { db()->beginTransaction(); $stmtUser = db()->prepare("UPDATE users SET full_name = ?, email = ?, status = ? WHERE id = ? AND role = 'truck_owner'"); $stmtUser->execute([$fullName, $email, $status, $userId]); if ($password !== '') { $stmtPass = db()->prepare("UPDATE users SET password = ? WHERE id = ? AND role = 'truck_owner'"); $stmtPass->execute([password_hash($password, PASSWORD_DEFAULT), $userId]); } $stmtProfile = db()->prepare(" UPDATE truck_owner_profiles SET phone = ?, address_line = ?, country_id = ?, city_id = ?, bank_account = ?, bank_name = ?, bank_branch = ?, is_company = ? WHERE user_id = ? "); $stmtProfile->execute([$phone, $addressLine, $countryId, $cityId, $bankAccount, $bankName, $bankBranch, $isCompany, $userId]); db()->commit(); $flash = 'Truck Owner profile updated successfully.'; } catch (Throwable $e) { db()->rollBack(); $errors[] = 'Failed to update truck owner profile. Please try again.'; } } } } // -- OUTPUT START -- if (!$isAjax): render_header('Edit Truck Owner', 'admin', true); ?>
| Truck Type | Capacity (T) | Plate No | Reg Expiry | Ins Expiry | Status | Actions |
|---|---|---|---|---|---|---|
| = e($truck['truck_type']) ?> | = e($truck['load_capacity']) ?> | = e($truck['plate_no']) ?> | = e($truck['registration_expiry_date'] ?? 'N/A') ?> | = e($truck['insurance_expiry_date'] ?? 'N/A') ?> | Expired/Disabled Approved Pending |