integration_name( $this->plugin_namespace . '-free-shipping-notice-block-integration' )
->set_script_name( '' )
->set_script_path( '/assets/blocks/free-shipping-notice-block-integration/' );
( new StoreEndpoint( $integration_data->get_integration_name(), 'page_type', false ) )->hooks();
( new FreeShippingStoreEndpointData( $integration_data->get_integration_name() ) )->hooks();
( new Registrator(
$integration_data,
$this->plugin_path,
$this->get_plugin_file_path(),
false,
false
) )->hooks();
}
/**
* .
*/
public function init_multicurrency() {
$prefix = $this->plugin_info->get_plugin_dir();
( new FilterConvertersFactory( $prefix ) )->hooks();
( new MultiCurrency( $this->logger, $prefix ) )->hooks();
}
/**
* .
*/
public function init_external_plugin_access() {
do_action( 'flexible-shipping/core/initialized', new ExternalPluginAccess( $this->plugin_info->get_version(), $this->logger ) );
}
/**
* .
* @internal
*/
public function init_shipping_zones_notice() {
( new MultipleShippingZonesMatchedSameTerritoryNotice( WC()->countries, new WC_Shipping_Zones() ) )->hooks();
}
/**
*
*/
private function init_assets_url_on_rules_settings_field() {
RulesSettingsField::set_assets_url( untrailingslashit( $this->get_plugin_assets_url() ) );
}
/**
* Init free shipping notice.
*
* @internal
*/
public function init_free_shipping_notice() {
$cart = WC()->cart;
$session = WC()->session;
( new FreeShippingNoticeGenerator( null, null, self::FS_FREE_SHIPPING_NOTICE_NAME ) )->hooks();
( new FreeShippingNoticeRenderer( $this->renderer ) )->hooks();
if ( $cart instanceof WC_Cart && $session instanceof WC_Session ) {
( new FreeShippingNotice( $cart, $session, self::FS_FREE_SHIPPING_NOTICE_NAME ) )->hooks();
( new \WPDesk\FS\TableRate\FreeShipping\Assets( $this->get_plugin_assets_url(), $this->scripts_version ) )->hooks();
}
( new NoticeTextSettings() )->hooks();
( new ProgressBarSettings() )->hooks();
( new \WPDesk\FS\TableRate\FreeShipping\Tracker() )->hooks();
}
/**
* Init tracker.
*/
private function init_tracker() {
add_action( 'woocommerce_init', function () {
TrackerInitializer::create_from_plugin_info(
$this->plugin_info,
$this->prepare_shoud_display_for_flexible_shipping(),
new OctolizeReasonsFactory(
'https://octol.io/fs-docs-exit-pop-up',
'https://octol.io/fs-support-forum-exit-pop-up',
__( 'Flexible Shipping PRO', 'flexible-shipping' ),
'https://octol.io/fs-contact-exit-pop-up',
)
)->hooks();
( new WPDesk_Flexible_Shipping_Tracker() )->hooks();
( new TrackerData() )->hooks();
} );
}
/**
* @return ShouldDisplayOrConditions
*/
private function prepare_shoud_display_for_flexible_shipping() {
$should_display = new ShouldDisplayOrConditions();
$should_display->add_should_diaplay_condition( new ShouldDisplayShippingMethodInstanceSettings( ShippingMethodSingle::SHIPPING_METHOD_ID ) );
$should_display_and_conditions = new ShouldDisplayAndConditions();
$should_display_and_conditions->add_should_diaplay_condition(
new ShouldDisplayGetParameterValue( 'page', 'wc-settings' )
);
$should_display_and_conditions->add_should_diaplay_condition(
new ShouldDisplayGetParameterValue( 'tab', 'shipping' )
);
$should_display_and_conditions->add_should_diaplay_condition(
new ShouldDisplayGetParameterValue( 'section', WPDesk_Flexible_Shipping_Settings::METHOD_ID )
);
$should_display->add_should_diaplay_condition( $should_display_and_conditions );
return $should_display;
}
/**
* Woocommerce shipping methods filter.
*
* @param array $methods .
*
* @return array
*/
public function woocommerce_shipping_methods_filter( $methods ) {
$methods[ ShippingMethodSingle::SHIPPING_METHOD_ID ] = ShippingMethodSingle::class;
$methods[ WPDesk_Flexible_Shipping::METHOD_ID ] = WPDesk_Flexible_Shipping::class;
if ( $this->can_register_fs_info() ) {
$methods[ WPDesk_Flexible_Shipping_Settings::METHOD_ID ] = WPDesk_Flexible_Shipping_Settings::class;
}
return $methods;
}
/**
* @return bool
*/
private function can_register_fs_info() {
if ( ! is_admin() ) {
return false;
}
return ! $this->is_adding_order_page() && ! $this->is_editing_order_page();
}
/**
* @return bool
*/
private function is_editing_order_page() {
$post = filter_input( INPUT_GET, 'post' );
$action = filter_input( INPUT_GET, 'action' );
return 'edit' === $action && $post;
}
/**
* @return bool
*/
private function is_adding_order_page() {
$action = filter_input( INPUT_POST, 'action' );
return wp_doing_ajax() && 'woocommerce_add_order_shipping' === $action;
}
/**
* Option woocommerce cod settings filter.
*
* @param array $value .
*
* @return array
*/
public function option_woocommerce_cod_settings( $value ) {
if ( is_checkout() ) {
if (
! empty( $value )
&& is_array( $value )
&& 'yes' === $value['enabled']
&& ! empty( $value['enable_for_methods'] )
&& is_array( $value['enable_for_methods'] )
) {
foreach ( $value['enable_for_methods'] as $method ) {
if ( 'flexible_shipping' === $method ) {
$all_fs_methods = flexible_shipping_get_all_shipping_methods();
$all_shipping_methods = flexible_shipping_get_all_shipping_methods();
$flexible_shipping = $all_shipping_methods['flexible_shipping'];
$flexible_shipping_rates = $flexible_shipping->get_all_rates();
foreach ( $flexible_shipping_rates as $flexible_shipping_rate ) {
$value['enable_for_methods'][] = $flexible_shipping_rate['id_for_shipping'];
}
break;
}
}
}
}
return $value;
}
/**
* Add flexible shipping order meta on checkout.
*
* @param WC_Order $order Order.
*/
public function add_flexible_shipping_order_meta_on_checkout( $order ) {
if ( ! $this->is_order_processed_on_checkout ) {
$mutex = WordpressPostMutex::fromOrder( $order );
$mutex->acquireLock();
$this->is_order_processed_on_checkout = true;
$order_shipping_methods = $order->get_shipping_methods();
foreach ( $order_shipping_methods as $shipping_id => $shipping_method ) {
if ( isset( $shipping_method['item_meta'] )
&& isset( $shipping_method['item_meta']['_fs_method'] )
) {
$fs_method = $shipping_method['item_meta']['_fs_method'];
if ( ! empty( $fs_method['method_integration'] ) ) {
$order_meta = $order->get_meta( '_flexible_shipping_integration', false );
if ( ! in_array( $fs_method['method_integration'], $order_meta, true ) ) {
$order->add_meta_data( '_flexible_shipping_integration', $fs_method['method_integration'] );
}
}
}
}
$mutex->releaseLock();
}
}
/**
* Set appropriate default FS method if no method chosen.
*
* @param string $default Default shipping method in frontend.
* @param WC_Shipping_Rate[] $available_methods Available methods in frontend.
* Function is assigned to woocommerce_default_shipment_method filter.
* In this parameter we expecting array of WC_Shipping_Rate objects.
* But third party plugins can change this parameter type or set it to
* null.
* @param string|bool|null $chosen_method If false or null then no method is chosen.
*
* @return string
*/
public function woocommerce_default_shipment_method( $default, $available_methods, $chosen_method ) {
if ( ! is_array( $available_methods ) ) {
return $default;
}
if ( null === $chosen_method || false === $chosen_method ) {
foreach ( $available_methods as $available_method ) {
$method_meta = $available_method->get_meta_data();
if ( $method_meta && isset( $method_meta[ WPDesk_Flexible_Shipping::META_DEFAULT ] ) && 'yes' === $method_meta[ WPDesk_Flexible_Shipping::META_DEFAULT ] ) {
$candidate_id = $available_method->get_id();
if ( array_key_exists( $candidate_id, $available_methods ) ) {
return $candidate_id;
}
}
}
}
return $default;
}
/**
* @param string $suffix .
*/
private function enqueue_rules_scripts( $suffix ) {
wp_register_script(
'fs_rules_settings',
trailingslashit( $this->get_plugin_assets_url() ) . 'js/rules-settings.js',
[ 'wp-i18n' ],
$this->scripts_version
);
wp_enqueue_script( 'fs_rules_settings' );
wp_enqueue_style(
'fs_rules_settings',
trailingslashit( $this->get_plugin_assets_url() ) . 'css/rules-settings.css',
[],
$this->scripts_version
);
wp_set_script_translations( 'fs_rules_settings', 'flexible-shipping', $this->plugin_path . '/lang/' );
}
/**
* Admin enqueue scripts.
*/
public function admin_enqueue_scripts() {
if ( $this->should_enqueue_admin_scripts() ) {
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
wp_register_script(
'fs_admin',
trailingslashit( $this->get_plugin_assets_url() ) . 'js/admin' . $suffix . '.js',
[ 'jquery' ],
$this->scripts_version
);
$notice_url = get_locale() == 'pl_PL' ? 'https://octol.io/fs-rate-not-good-pl' : 'https://octol.io/fs-rate-not-good';
wp_localize_script(
'fs_admin',
'fs_admin',
[
'ajax_url' => admin_url( 'admin-ajax.php' ),
'notice_not_good_enought' => sprintf(
// Translators: link.
__( 'How can We make Flexible Shipping better for you? %1$sJust write to us.%2$s', 'flexible-shipping' ),
'',
''
),
]
);
wp_enqueue_script( 'fs_admin' );
$current_screen = get_current_screen();
wp_register_script(
'wpdesk_contextual_info',
trailingslashit( $this->get_plugin_assets_url() ) . 'js/contextual-info' . $suffix . '.js',
[ 'jquery' ],
$this->scripts_version
);
wp_enqueue_script( 'wpdesk_contextual_info' );
if ( ! empty( $current_screen ) && 'shop_order' === $current_screen->id ) {
wp_enqueue_media();
}
wp_enqueue_style(
'fs_admin',
trailingslashit( $this->get_plugin_assets_url() ) . 'css/admin.css',
[],
$this->scripts_version
);
wp_enqueue_style(
'fs_font',
trailingslashit( $this->get_plugin_assets_url() ) . 'css/font' . $suffix . '.css',
[],
$this->scripts_version
);
$this->enqueue_rules_scripts( $suffix );
do_action( 'flexible-shipping/admin/enqueue_scripts', $this, $suffix );
}
}
/**
* Should enqueue admin scripts?
*/
private function should_enqueue_admin_scripts() {
$current_screen = get_current_screen();
if ( ! $current_screen ) {
return false;
}
$wc_screen_id = sanitize_title( __( 'WooCommerce', 'woocommerce' ) );
if (
'woocommerce_page_wc-orders' === $current_screen->id
|| in_array( $current_screen->post_type, [ 'shop_order', 'shop_subscription', ], true )
|| $wc_screen_id . '_page_wc-settings' === $current_screen->id
|| 'woocommerce_page_wc-settings' === $current_screen->id ) {
return true;
}
return false;
}
/**
* Enqueue Wordpress scripts.
*/
public function wp_enqueue_scripts() {
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
}
/**
* Links filter.
*
* @param array $links .
*
* @return array
*/
public function links_filter( $links ) {
$settings_url = admin_url( 'admin.php?page=wc-settings&tab=shipping§ion=' . \WPDesk_Flexible_Shipping_Settings::METHOD_ID );
$plugin_links = [
'' . __(
'Settings',
'flexible-shipping'
) . '',
];
if ( ! defined( 'FLEXIBLE_SHIPPING_PRO_VERSION' ) ) {
$pro_link = get_locale() === 'pl_PL' ? 'https://octol.io/fs-upgrade-pl' : 'https://octol.io/fs-upgrade';
$plugin_links[] = '' . __(
'Buy PRO',
'flexible-shipping'
) . '';
}
return array_merge( $plugin_links, $links );
}
/**
* .
* @param string $method_id .
* @param array $shipping_method .
*
* @return string
*/
public function flexible_shipping_method_rate_id( $method_id, array $shipping_method ) {
if ( isset( $shipping_method['id_for_shipping'] ) && '' !== $shipping_method['id_for_shipping'] ) {
$method_id = $shipping_method['id_for_shipping'];
}
return $method_id;
}
}