OwlCyberSecurity - MANAGER
Edit File: ExportWCShipping.php
<?php declare(strict_types=1); namespace Automattic\WooCommerce\Admin\Features\Blueprint\Exporters; use Automattic\WooCommerce\Blueprint\Exporters\HasAlias; use Automattic\WooCommerce\Blueprint\Exporters\StepExporter; use Automattic\WooCommerce\Blueprint\Steps\RunSql; use Automattic\WooCommerce\Blueprint\Steps\SetSiteOptions; use Automattic\WooCommerce\Blueprint\Util; /** * Class ExportWCShipping * * Exports WooCommerce shipping settings and implements the StepExporter interface. * * @package Automattic\WooCommerce\Admin\Features\Blueprint\Exporters */ class ExportWCShipping implements StepExporter, HasAlias { /** * Export WooCommerce shipping settings. * * @return array Array of RunSql|SetSiteOptions instances. */ public function export(): array { $steps = array_merge( array(), $this->get_steps_for_classes_and_terms(), $this->get_steps_for_zones(), $this->get_steps_for_locations(), $this->get_steps_for_methods_and_options() ); $steps[] = $this->get_step_for_local_pickup(); return $steps; } /** * Retrieve term data based on provided classes. * * @param array $classes List of classes with term IDs. * @return array Retrieved term data. */ protected function get_terms( array $classes ): array { global $wpdb; $term_ids = array_map( fn( $term ) => (int) $term['term_id'], $classes ); $term_ids = implode( ', ', $term_ids ); return ! empty( $term_ids ) ? $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}terms WHERE term_id IN (%s)", $term_ids ), ARRAY_A ) : array(); } /** * Retrieve shipping classes and related terms. * * @return array Steps for shipping classes and terms. */ protected function get_steps_for_classes_and_terms(): array { global $wpdb; $classes = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}term_taxonomy WHERE taxonomy = 'product_shipping_class'", ARRAY_A ); $classes_steps = array_map( fn( $class_row ) => new RunSql( Util::array_to_insert_sql( $class_row, $wpdb->prefix . 'term_taxonomy', 'replace into' ) ), $classes ); $terms = array_map( fn( $term ) => new RunSql( Util::array_to_insert_sql( $term, $wpdb->prefix . 'terms', 'replace into' ) ), $this->get_terms( $classes ) ); return array_merge( $classes_steps, $terms ); } /** * Get the name of the step. * * @return string */ public function get_step_name(): string { return RunSql::get_step_name(); } /** * Return label used in the frontend. * * @return string */ public function get_label(): string { return __( 'Shipping', 'woocommerce' ); } /** * Return description used in the frontend. * * @return string */ public function get_description(): string { return __( 'It includes all settings in WooCommerce | Settings | Shipping.', 'woocommerce' ); } /** * Get the alias. * * @return string */ public function get_alias(): string { return 'setWCShipping'; } /** * Retrieve shipping zones from the database. * * @return array Steps for shipping zones. */ private function get_steps_for_zones(): array { global $wpdb; return array_map( fn( $zone ) => new RunSql( Util::array_to_insert_sql( $zone, $wpdb->prefix . 'woocommerce_shipping_zones', 'replace into' ) ), $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}woocommerce_shipping_zones", ARRAY_A ) ); } /** * Retrieve shipping zone locations. * * @return array Steps for shipping zone locations. */ private function get_steps_for_locations(): array { global $wpdb; return array_map( fn( $location ) => new RunSql( Util::array_to_insert_sql( $location, $wpdb->prefix . 'woocommerce_shipping_zone_locations', 'replace into' ) ), $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}woocommerce_shipping_zone_locations", ARRAY_A ) ); } /** * Retrieve shipping methods and options. * * @return array Steps for shipping methods and options. */ private function get_steps_for_methods_and_options(): array { global $wpdb; $methods = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}woocommerce_shipping_zone_methods", ARRAY_A ); $method_options = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_name LIKE 'woocommerce_flat_rate_%_settings' OR option_name LIKE 'woocommerce_free_shipping_%_settings'", ARRAY_A ); return array_merge( array_map( fn( $method ) => new RunSql( Util::array_to_insert_sql( $method, $wpdb->prefix . 'woocommerce_shipping_zone_methods', 'replace into' ) ), $methods ), array_map( fn( $option ) => new RunSql( Util::array_to_insert_sql( $option, $wpdb->prefix . 'options', 'replace into' ) ), $method_options ) ); } /** * Retrieve local pickup settings. * * @return SetSiteOptions Local pickup settings step. */ private function get_step_for_local_pickup(): SetSiteOptions { return new SetSiteOptions( array( 'woocommerce_pickup_location_settings' => get_option( 'woocommerce_pickup_location_settings', array() ), 'pickup_location_pickup_locations' => get_option( 'pickup_location_pickup_locations', array() ), ) ); } }