get_countries(); $formatted = []; foreach ($countries as $code => $name) { $formatted[] = [ 'code' => $code, 'name' => $name, ]; } return $formatted; } /** * Get all timezones * * @return array List of timezones */ public static function get_timezones(): array { $timezones = timezone_identifiers_list(); $formatted = []; foreach ($timezones as $timezone) { // Group by continent $parts = explode('/', $timezone); $continent = $parts[0] ?? 'Other'; if (!isset($formatted[$continent])) { $formatted[$continent] = []; } // Format display name $display = str_replace('_', ' ', $timezone); // Get UTC offset try { $tz = new \DateTimeZone($timezone); $now = new \DateTime('now', $tz); $offset = $tz->getOffset($now); $hours = floor($offset / 3600); $minutes = abs(floor(($offset % 3600) / 60)); $offset_string = sprintf('UTC%+d:%02d', $hours, $minutes); } catch (\Exception $e) { $offset_string = 'UTC'; } $formatted[$continent][] = [ 'value' => $timezone, 'label' => $display, 'offset' => $offset_string, ]; } return $formatted; } /** * Get all currencies from WooCommerce * * @return array List of currencies */ public static function get_currencies(): array { if (!function_exists('get_woocommerce_currencies')) { return []; } $currencies = get_woocommerce_currencies(); $formatted = []; foreach ($currencies as $code => $name) { $symbol = get_woocommerce_currency_symbol($code); $formatted[] = [ 'code' => $code, 'name' => $name, 'symbol' => $symbol, ]; } return $formatted; } /** * Get store settings * * @return array Store settings */ public static function get_settings(): array { // WooCommerce stores country as "COUNTRY:STATE" format $default_country = get_option('woocommerce_default_country', ''); $country_parts = explode(':', $default_country); $country_code = $country_parts[0] ?? ''; return [ 'store_name' => get_option('blogname', ''), 'contact_email' => get_option('admin_email', ''), 'support_email' => get_option('woocommerce_email_from_address', ''), 'phone' => get_option('woocommerce_store_phone', ''), 'country' => $country_code, 'address' => get_option('woocommerce_store_address', ''), 'address_2' => get_option('woocommerce_store_address_2', ''), 'city' => get_option('woocommerce_store_city', ''), 'postcode' => get_option('woocommerce_store_postcode', ''), 'currency' => get_option('woocommerce_currency', 'USD'), 'currency_position' => get_option('woocommerce_currency_pos', 'left'), 'thousand_separator' => get_option('woocommerce_price_thousand_sep', ','), 'decimal_separator' => get_option('woocommerce_price_decimal_sep', '.'), 'number_of_decimals' => (int) get_option('woocommerce_price_num_decimals', 2), 'timezone' => get_option('timezone_string', 'UTC') ?: 'UTC', 'weight_unit' => get_option('woocommerce_weight_unit', 'kg'), 'dimension_unit' => get_option('woocommerce_dimension_unit', 'cm'), // Branding 'store_logo' => get_option('woonoow_store_logo', ''), 'store_logo_dark' => get_option('woonoow_store_logo_dark', ''), 'store_icon' => get_option('woonoow_store_icon', ''), 'store_tagline' => get_option('blogdescription', ''), 'primary_color' => get_option('woonoow_primary_color', '#3b82f6'), 'accent_color' => get_option('woonoow_accent_color', '#10b981'), 'error_color' => get_option('woonoow_error_color', '#ef4444'), ]; } /** * Save store settings * * @param array $settings Settings to save * @return bool True on success */ public static function save_settings(array $settings): bool { $mapping = [ 'store_name' => 'blogname', 'contact_email' => 'admin_email', 'support_email' => 'woocommerce_email_from_address', 'phone' => 'woocommerce_store_phone', 'country' => 'woocommerce_default_country', 'address' => 'woocommerce_store_address', 'address_2' => 'woocommerce_store_address_2', 'city' => 'woocommerce_store_city', 'postcode' => 'woocommerce_store_postcode', 'currency' => 'woocommerce_currency', 'currency_position' => 'woocommerce_currency_pos', 'thousand_separator' => 'woocommerce_price_thousand_sep', 'decimal_separator' => 'woocommerce_price_decimal_sep', 'number_of_decimals' => 'woocommerce_price_num_decimals', 'timezone' => 'timezone_string', 'weight_unit' => 'woocommerce_weight_unit', 'dimension_unit' => 'woocommerce_dimension_unit', // Branding 'store_logo' => 'woonoow_store_logo', 'store_logo_dark' => 'woonoow_store_logo_dark', 'store_icon' => 'woonoow_store_icon', 'store_tagline' => 'blogdescription', 'primary_color' => 'woonoow_primary_color', 'accent_color' => 'woonoow_accent_color', 'error_color' => 'woonoow_error_color', ]; foreach ($settings as $key => $value) { if (isset($mapping[$key])) { update_option($mapping[$key], $value); } } return true; } }