true]); } public static function render(): void { $payload = self::payload(); if (is_wp_error($payload)) { printf('

%s

', 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(); } }