ctype_digit($id) ? (int) $id : $id]; foreach (self::STRING_FIELDS as $field) { if (isset($raw[$field]) && is_scalar($raw[$field])) { $point[$field] = sanitize_text_field((string) $raw[$field]); } } foreach (['lat', 'lng'] as $field) { if (isset($raw[$field]) && is_numeric($raw[$field])) { $point[$field] = (float) $raw[$field]; } } return $point['id'] !== 0 && ($point['external_id'] ?? '') !== '' ? $point : null; } public static function address(array $point): string { $street = $point['street'] ?? ''; $postalCode = $point['postal_code'] ?? ''; $cityLine = trim($postalCode . ' ' . ($point['city'] ?? '')); // a szállító utca mezője néha már az irányítószámot és a várost is tartalmazza (pl. Foxpost) if ($postalCode !== '' && str_contains($street, $postalCode)) { $cityLine = ''; } return implode(', ', array_filter([$point['street'] ?? '', $cityLine, $point['country_code'] ?? ''])); } // az utca a város és irányítószám nélkül ("1016 Budapest, Krisztina krt. 65." vagy "Krisztina krt. 77, 1016 BUDAPEST") public static function street_only(array $point): string { $street = trim((string) ($point['street'] ?? '')); $postalCode = (string) ($point['postal_code'] ?? ''); if ($postalCode === '' || !str_contains($street, ',')) { return $street; } $parts = array_filter(array_map('trim', explode(',', $street)), fn ($part) => !str_contains($part, $postalCode)); return $parts ? implode(', ', $parts) : $street; } /** * A pont lesz a rendelés szállítási címe (cég: a pont neve), így minden e-mailben, a fiókban és az admin felületen * címként látszik. A vásárló neve és telefonszáma marad; az eredeti szállítási címe a rendelés adataiban megmarad. */ public static function apply_as_shipping_address(WC_Order $order, array $point): void { if (get_option('pickupselect_point_as_shipping', 'yes') !== 'yes') { return; } if (!$order->get_meta('_pickupselect_customer_shipping')) { $order->update_meta_data('_pickupselect_customer_shipping', $order->get_address('shipping')); } $firstName = $order->get_shipping_first_name() ?: $order->get_billing_first_name(); $lastName = $order->get_shipping_last_name() ?: $order->get_billing_last_name(); $order->set_shipping_first_name($firstName); $order->set_shipping_last_name($lastName); $order->set_shipping_company((string) ($point['name'] ?? '')); $order->set_shipping_address_1(self::street_only($point)); $order->set_shipping_address_2(''); $order->set_shipping_city((string) ($point['city'] ?? '')); $order->set_shipping_postcode((string) ($point['postal_code'] ?? '')); $order->set_shipping_state(''); if (!empty($point['country_code'])) { $order->set_shipping_country(strtoupper((string) $point['country_code'])); } if (!$order->get_shipping_phone()) { $order->set_shipping_phone($order->get_billing_phone()); } $order->update_meta_data('_pickupselect_as_shipping', 'yes'); } }