true]);
}
public static function render(): void
{
$payload = self::payload();
if (is_wp_error($payload)) {
printf('
|
', esc_html($payload->get_error_message()));
return;
}
$widget = $payload['widget'];
$name = self::INPUT;
?>
|
|
__('Primary colour', 'pickupselect'), 'secondary_color' => __('Secondary colour', 'pickupselect')] as $key => $label) : ?>
|
|
|
|
|
|
|
|
sanitize_key($input['theme'] ?? 'light'),
'primary_color' => sanitize_hex_color($input['primary_color'] ?? '') ?? '',
'secondary_color' => sanitize_hex_color($input['secondary_color'] ?? '') ?? '',
'language_code' => sanitize_key($input['language_code'] ?? ''),
'show_powered_by' => !empty($input['show_powered_by']),
];
// változat nélkül a widget a mostanin marad (a szerver nem írja át)
if (isset($input['version'])) {
$settings['version'] = (int) $input['version'];
}
$result = self::put($settings);
if (is_wp_error($result)) {
WC_Admin_Settings::add_error(self::error_text($result));
return;
}
WC_Admin_Settings::add_message(__('The appearance was saved in PickupSelect.', 'pickupselect'));
}
/**
* A widget mentése a megadott megjelenéssel (a többi a jelenlegi marad). A widget mindig "minden ország és szállító":
* a pénztárban a bolt szállítók táblázata szűkít (override-dal), így új szállító felvételéhez nem kell a widgethez nyúlni.
* @return array|WP_Error
*/
public static function put(array $look = [])
{
$payload = self::payload();
if (is_wp_error($payload)) {
return $payload;
}
$widget = $payload['widget'];
// a térkép a bolt országában nyílik, ha a PickupSelect ismeri
$baseCountry = WC()->countries ? WC()->countries->get_base_country() : '';
$defaultCountry = (int) ($widget['default_country_id'] ?? 0);
foreach ($payload['countries'] as $country) {
if ($country['code'] === $baseCountry) {
$defaultCountry = (int) $country['id'];
}
}
if (!$defaultCountry && !empty($payload['countries'])) {
$defaultCountry = (int) $payload['countries'][0]['id'];
}
$body = $look + [
'theme' => $widget['theme'] ?: 'light',
'primary_color' => $widget['primary_color'] ?? '',
'secondary_color' => $widget['secondary_color'] ?? '',
'language_code' => $widget['language_code'] ?: 'en',
'version' => (int) $widget['version'],
];
$body['all_carriers'] = true;
$body['default_country_id'] = $defaultCountry;
$result = PickupSelect_Connection::request('PUT', '/api/manage/widget', $body);
if (!is_wp_error($result)) {
self::$payload = $result;
PickupSelect_Catalog::forget();
}
return $result;
}
// a 422-es mezőhibák olvashatóan (a beállítás oldal felső hibaüzenetében)
private static function error_text(WP_Error $error): string
{
$data = $error->get_error_data();
$messages = [];
foreach ((array) ($data['errors'] ?? []) as $fieldMessages) {
foreach ((array) $fieldMessages as $message) {
$messages[] = $message;
}
}
if (($data['status'] ?? 0) === 422 && $messages) {
return __('The widget was not saved:', 'pickupselect') . ' ' . implode(' ', array_unique($messages));
}
return $error->get_error_message();
}
}