File "class-wc-connect-options.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/.wp-cli/wp-content/plugins/woocommerce-services/classes/class-wc-connect-options.php
File size: 9.81 KB
MIME-type: text/x-php
Charset: utf-8
<?php
if ( ! class_exists( 'WC_Connect_Options' ) ) {
class WC_Connect_Options {
/**
* An array that maps a grouped option type to an option name.
*
* @var array
*/
private static $grouped_options = array(
'compact' => 'wc_connect_options',
);
/**
* Returns an array of option names for a given type.
*
* @param string $type The type of option to return. Defaults to 'compact'.
*
* @return array
*/
public static function get_option_names( $type = 'compact' ) {
switch ( $type ) {
case 'non_compact':
return array(
'error_notice',
'services',
'services_last_update',
'last_heartbeat',
'origin_address',
'last_rate_request',
'services_last_result_code',
);
case 'shipping_method':
return array(
'form_settings',
'failure_timestamp',
);
}
return array(
'tos_accepted',
'store_guid',
'debug_logging_enabled',
'debug_display_enabled',
'payment_methods',
'account_settings',
'paper_size',
'packages',
'predefined_packages',
'shipping_methods_migrated',
'should_display_nux_after_jp_cxn_banner',
'needs_tax_environment_setup',
'banner_ppec',
);
}
/**
* Deletes all options created by WooCommerce Shipping & Tax, including shipping method options
*/
public static function delete_all_options() {
if ( defined( 'WOOCOMMERCE_CONNECT_DEV_SERVER_URL' ) ) {
return;
}
foreach ( self::$grouped_options as $group_key => $group ) {
// delete legacy options
foreach ( self::get_option_names( $group_key ) as $group_option ) {
delete_option( "wc_connect_$group_option" );
}
delete_option( $group );
}
$non_compacts = self::get_option_names( 'non_compact' );
foreach ( $non_compacts as $non_compact ) {
delete_option( "wc_connect_$non_compact" );
}
self::delete_all_shipping_methods_options();
}
/**
* Returns the requested option. Looks in wc_connect_options or wc_connect_$name as appropriate.
*
* @param string $name Option name
* @param mixed $default (optional)
*
* @return mixed
*/
public static function get_option( $name, $default = false ) {
if ( self::is_valid( $name, 'non_compact' ) ) {
return get_option( "wc_connect_$name", $default );
}
foreach ( array_keys( self::$grouped_options ) as $group ) {
if ( self::is_valid( $name, $group ) ) {
return self::get_grouped_option( $group, $name, $default );
}
}
trigger_error( esc_html( sprintf( 'Invalid WooCommerce Shipping & Tax option name: %s', $name ), E_USER_WARNING ) );
return $default;
}
/**
* Updates the single given option. Updates wc_connect_options or wc_connect_$name as appropriate.
*
* @param string $name Option name
* @param mixed $value Option value
*
* @return bool Was the option successfully updated?
*/
public static function update_option( $name, $value ) {
if ( self::is_valid( $name, 'non_compact' ) ) {
return update_option( "wc_connect_$name", $value );
}
foreach ( array_keys( self::$grouped_options ) as $group ) {
if ( self::is_valid( $name, $group ) ) {
return self::update_grouped_option( $group, $name, $value );
}
}
trigger_error( esc_html( sprintf( 'Invalid WooCommerce Shipping & Tax option name: %s', $name ), E_USER_WARNING ) );
return false;
}
/**
* Deletes the given option. May be passed multiple option names as an array.
* Updates wc_connect_options and/or deletes wc_connect_$name as appropriate.
*
* @param string|array $names
*
* @return bool Was the option successfully deleted?
*/
public static function delete_option( $names ) {
$result = true;
$names = (array) $names;
if ( ! self::is_valid( $names ) ) {
trigger_error( esc_html( sprintf( 'Invalid WooCommerce Shipping & Tax option names: %s', print_r( $names, 1 ) ), E_USER_WARNING ) );
return false;
}
foreach ( array_intersect( $names, self::get_option_names( 'non_compact' ) ) as $name ) {
if ( ! delete_option( "wc_connect_$name" ) ) {
$result = false;
}
}
foreach ( array_keys( self::$grouped_options ) as $group ) {
if ( ! self::delete_grouped_option( $group, $names ) ) {
$result = false;
}
}
return $result;
}
/**
* Gets a shipping method option
*
* @param $name
* @param $default
* @param $service_id
* @param $service_instance
*
* @return mixed
*/
public static function get_shipping_method_option( $name, $default, $service_id, $service_instance = false ) {
$option_name = self::get_shipping_method_option_name( $name, $service_id, $service_instance );
if ( ! $option_name ) {
trigger_error( esc_html( sprintf( 'Invalid WooCommerce Shipping & Tax shipping method option name: %s', $name ), E_USER_WARNING ) );
return $default;
}
return get_option( $option_name, $default );
}
/**
* Updates a shipping method option
*
* @param $name
* @param $value
* @param $service_id
* @param $service_instance
*
* @return bool
*/
public static function update_shipping_method_option( $name, $value, $service_id, $service_instance = false ) {
$option_name = self::get_shipping_method_option_name( $name, $service_id, $service_instance );
if ( ! $option_name ) {
trigger_error( esc_html( sprintf( 'Invalid WooCommerce Shipping & Tax shipping method option name: %s', $name ), E_USER_WARNING ) );
return false;
}
return update_option( $option_name, $value );
}
/**
* Deletes a shipping method option
*
* @param $name
* @param $service_id
* @param $service_instance
*
* @return bool
*/
public static function delete_shipping_method_option( $name, $service_id, $service_instance = false ) {
$option_name = self::get_shipping_method_option_name( $name, $service_id, $service_instance );
if ( ! $option_name ) {
trigger_error( esc_html( sprintf( 'Invalid WooCommerce Shipping & Tax shipping method option name: %s', $name ), E_USER_WARNING ) );
return false;
}
return delete_option( $option_name );
}
/**
* Deletes all options related to a shipping method
*
* @param $service_id
* @param $service_instance
*/
public static function delete_shipping_method_options( $service_id, $service_instance = false ) {
$option_names = self::get_option_names( 'shipping_method' );
foreach ( $option_names as $name ) {
delete_option( self::get_shipping_method_option_name( $name, $service_id, $service_instance ) );
}
}
private static function get_grouped_option( $group, $name, $default ) {
$options = get_option( self::$grouped_options[ $group ] );
if ( is_array( $options ) && isset( $options[ $name ] ) ) {
return $options[ $name ];
}
// make the grouped options backwards-compatible and migrate the old options
$legacy_name = "wc_connect_$name";
$legacy_option = get_option( $legacy_name, false );
if ( ! $legacy_option ) {
return $default;
}
if ( self::update_grouped_option( $group, $name, $legacy_option ) ) {
delete_option( $legacy_name );
}
return $legacy_option;
}
private static function update_grouped_option( $group, $name, $value ) {
$options = get_option( self::$grouped_options[ $group ] );
if ( ! is_array( $options ) ) {
$options = array();
}
$options[ $name ] = $value;
return update_option( self::$grouped_options[ $group ], $options );
}
private static function delete_grouped_option( $group, $names ) {
$options = get_option( self::$grouped_options[ $group ], array() );
$to_delete = array_intersect( $names, self::get_option_names( $group ), array_keys( $options ) );
if ( $to_delete ) {
foreach ( $to_delete as $name ) {
unset( $options[ $name ] );
}
return update_option( self::$grouped_options[ $group ], $options );
}
return true;
}
/**
* Based on the service id and optional instance, generates the option name
*
* @param $name
* @param $service_id
* @param $service_instance
*
* @return string|bool
*/
private static function get_shipping_method_option_name( $name, $service_id, $service_instance = false ) {
if ( ! in_array( $name, self::get_option_names( 'shipping_method' ) ) ) {
return false;
}
if ( ! $service_instance ) {
return 'woocommerce_' . $service_id . '_' . $name;
}
return 'woocommerce_' . $service_id . '_' . $service_instance . '_' . $name;
}
/**
* Is the option name valid?
*
* @param string $name The name of the option
* @param string $group The name of the group that the option is in. Defaults to compact.
*
* @return bool Is the option name valid?
*/
private static function is_valid( $name, $group = 'non_compact' ) {
$group_keys = array_keys( self::$grouped_options );
if ( is_array( $name ) ) {
$compact_names = array();
foreach ( $group_keys as $_group ) {
$compact_names = array_merge( $compact_names, self::get_option_names( $_group ) );
}
$result = array_diff( $name, self::get_option_names( 'non_compact' ), $compact_names );
return empty( $result );
}
if ( is_null( $group ) || 'non_compact' === $group ) {
if ( in_array( $name, self::get_option_names( $group ) ) ) {
return true;
}
}
foreach ( array_keys( self::$grouped_options ) as $_group ) {
if ( is_null( $group ) || $group === $_group ) {
if ( in_array( $name, self::get_option_names( $_group ) ) ) {
return true;
}
}
}
return false;
}
/**
* Deletes all options of all shipping methods
*/
private static function delete_all_shipping_methods_options() {
global $wpdb;
$methods = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}woocommerce_shipping_zone_methods " );
foreach ( (array) $methods as $method ) {
self::delete_shipping_method_options( $method->method_id, $method->instance_id );
}
}
}
}