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.truck_type, p.load_capacity, p.plate_no, p.bank_account, p.bank_name, p.bank_branch, p.id_card_path, p.truck_pic_path, p.registration_path 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(); 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(); $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'] ?? ''); $truckType = trim($_POST['truck_type'] ?? ''); $loadCapacity = trim($_POST['load_capacity'] ?? ''); $plateNo = trim($_POST['plate_no'] ?? ''); $status = trim($_POST['status'] ?? ''); $password = $_POST['password'] ?? ''; $bankAccount = trim($_POST['bank_account'] ?? ''); $bankName = trim($_POST['bank_name'] ?? ''); $bankBranch = trim($_POST['bank_branch'] ?? ''); 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 ($truckType === '' || $loadCapacity === '' || $plateNo === '') { $errors[] = 'Truck type, load capacity, and plate number are required.'; } elseif (!is_numeric($loadCapacity) || (float)$loadCapacity <= 0) { $errors[] = 'Load capacity must be a positive number.'; } if ($countryId <= 0 || $cityId <= 0) { $errors[] = 'Please select country and city.'; } else { $cityCheck = db()->prepare("SELECT COUNT(*) FROM cities WHERE id = ? AND country_id = ?"); $cityCheck->execute([$cityId, $countryId]); if ((int)$cityCheck->fetchColumn() === 0) { $errors[] = 'Selected city does not belong to selected country.'; } } 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 = ?, truck_type = ?, load_capacity = ?, plate_no = ?, bank_account = ?, bank_name = ?, bank_branch = ? WHERE user_id = ? "); $stmtProfile->execute([$phone, $addressLine, $countryId, $cityId, $truckType, $loadCapacity, $plateNo, $bankAccount, $bankName, $bankBranch, $userId]); db()->commit(); $flash = 'Truck Owner profile updated successfully.'; // If AJAX, return success immediately if ($isAjax) { header('Content-Type: application/json'); echo json_encode(['success' => true, 'message' => $flash]); exit; } // Refresh data for non-ajax $owner['full_name'] = $fullName; $owner['email'] = $email; $owner['status'] = $status; $owner['phone'] = $phone; $owner['address_line'] = $addressLine; $owner['country_id'] = $countryId; $owner['city_id'] = $cityId; $owner['truck_type'] = $truckType; $owner['load_capacity'] = $loadCapacity; $owner['plate_no'] = $plateNo; $owner['bank_account'] = $bankAccount; $owner['bank_name'] = $bankName; $owner['bank_branch'] = $bankBranch; } catch (Throwable $e) { db()->rollBack(); if (stripos($e->getMessage(), 'Duplicate entry') !== false) { $errors[] = 'This email is already in use by another account.'; } else { $errors[] = 'Failed to update truck owner profile. Please try again.'; } } } if ($isAjax && $errors) { header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => implode('
', $errors)]); exit; } } $idCards = json_decode($owner['id_card_path'] ?? '[]', true) ?: []; $regs = json_decode($owner['registration_path'] ?? '[]', true) ?: []; $pic = $owner['truck_pic_path']; // -- OUTPUT START -- if (!$isAjax): render_header('Edit Truck Owner', 'admin', true); ?>
← Back to Truck Owners

Edit Truck Owner

Update profile information for .

', $errors)) ?>
Cancel