AdminHooks.php
1 week ago
DefaultConversion.php
1 week ago
FlatRateShipping.php
5 years ago
FreeShipping.php
1 week ago
FrontEndHooks.php
1 week ago
LocalPickup.php
5 years ago
ShippingClasses.php
1 week ago
ShippingClassesMode.php
1 week ago
ShippingHooksFactory.php
1 week ago
ShippingMode.php
1 week ago
ShippingModeBase.php
1 week ago
ShippingModeProvider.php
1 week ago
UnsupportedShipping.php
1 week ago
VariableCost.php
1 week ago
AdminHooks.php
109 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WCML\Multicurrency\Shipping; |
| 4 | |
| 5 | use IWPML_Action; |
| 6 | use WCML\StandAlone\IStandAloneAction; |
| 7 | use WCML_Multi_Currency; |
| 8 | |
| 9 | class AdminHooks implements IWPML_Action, IStandAloneAction { |
| 10 | const WCML_SHIPPING_COSTS = 'wcml_shipping_costs'; |
| 11 | |
| 12 | private $wcmlMultiCurrency; |
| 13 | |
| 14 | public function __construct( \WCML_Multi_Currency $wcmlMultiCurrency ) { |
| 15 | $this->wcmlMultiCurrency = $wcmlMultiCurrency; |
| 16 | } |
| 17 | |
| 18 | public function add_hooks() { |
| 19 | ShippingModeProvider::getAll()->each( function( ShippingMode $shippingMode ) { |
| 20 | add_filter( |
| 21 | 'woocommerce_shipping_instance_form_fields_' . $shippingMode->getMethodId(), |
| 22 | $this->addCurrencyShippingFields( $shippingMode ), |
| 23 | 10, |
| 24 | 1 |
| 25 | ); |
| 26 | } |
| 27 | ); |
| 28 | add_action( 'admin_enqueue_scripts', [ $this, 'loadJs' ] ); |
| 29 | } |
| 30 | |
| 31 | public function addCurrencyShippingFields( ShippingMode $shippingMode ) { |
| 32 | return function( array $field ) use ( $shippingMode ) { |
| 33 | return $this->addCurrencyShippingFieldsToShippingMethodForm( $field, $shippingMode ); |
| 34 | }; |
| 35 | } |
| 36 | |
| 37 | private function addCurrencyShippingFieldsToShippingMethodForm( array $field, ShippingMode $shippingMode ) { |
| 38 | $field = $this->addTitleField( $field ); |
| 39 | $field = $this->addEnableField( $field ); |
| 40 | $field = $this->addCurrenciesFields( $field, $shippingMode ); |
| 41 | if ( $shippingMode instanceof ShippingClassesMode ) { |
| 42 | $field = ShippingClasses::addFields( $field, $this->wcmlMultiCurrency ); |
| 43 | } |
| 44 | return $field; |
| 45 | } |
| 46 | |
| 47 | private function addTitleField( $field ) { |
| 48 | $field[ 'wcml_shipping_costs_title' ] = [ |
| 49 | 'title' => __( 'Costs and values in custom currencies', 'woocommerce-multilingual' ), |
| 50 | 'type' => 'title', |
| 51 | 'default' => '', |
| 52 | 'description' => __( 'WPML Multilingual & Multicurrency for WooCommerce by default will multiply all your costs and values defined above by currency exchange rates. If you don\'t want this and you prefer static values instead, you can define them here.', 'woocommerce-multilingual' ), |
| 53 | ]; |
| 54 | return $field; |
| 55 | } |
| 56 | |
| 57 | private function addEnableField( array $field ) { |
| 58 | $enable_field = [ |
| 59 | 'title' => esc_html__( 'Enable costs in custom currencies', 'woocommerce-multilingual' ), |
| 60 | 'type' => 'select', |
| 61 | 'class' => 'wcml-enable-shipping-custom-currency', |
| 62 | 'default' => 'auto', |
| 63 | 'options' => [ |
| 64 | 'auto' => esc_html__( 'Calculate shipping costs in other currencies automatically', 'woocommerce-multilingual' ), |
| 65 | 'manual' => esc_html__( 'Set shipping costs in other currencies manually', 'woocommerce-multilingual' ) |
| 66 | ] |
| 67 | ]; |
| 68 | $field[ self::WCML_SHIPPING_COSTS ] = $enable_field; |
| 69 | |
| 70 | return $field; |
| 71 | } |
| 72 | |
| 73 | public function addCurrenciesFields( array $field, ShippingMode $shippingMode ) { |
| 74 | foreach ( $this->wcmlMultiCurrency->get_currency_codes() as $currencyCode ) { |
| 75 | if ( $this->wcmlMultiCurrency->get_default_currency() === $currencyCode ) { |
| 76 | continue; |
| 77 | } |
| 78 | $field = $this->getCurrencyField( $field, $currencyCode, $shippingMode ); |
| 79 | } |
| 80 | return $field; |
| 81 | } |
| 82 | |
| 83 | protected function getCurrencyField( $field, $currencyCode, ShippingMode $shippingMode ) { |
| 84 | $fieldKey = $shippingMode->getSettingsFormKey( $currencyCode ); |
| 85 | if ( $fieldKey ) { |
| 86 | $fieldValue = [ |
| 87 | 'title' => $shippingMode->getFieldTitle( $currencyCode ), |
| 88 | 'type' => 'text', |
| 89 | 'description' => $shippingMode->getFieldDescription( $currencyCode ), |
| 90 | 'default' => '0', |
| 91 | 'desc_tip' => true, |
| 92 | 'class' => 'wcml-shipping-cost-currency' |
| 93 | ]; |
| 94 | |
| 95 | $field[ $fieldKey] = $fieldValue; |
| 96 | } |
| 97 | return $field; |
| 98 | } |
| 99 | |
| 100 | public function loadJs() { |
| 101 | wp_enqueue_script( |
| 102 | 'wcml-admin-shipping-currency-selector', |
| 103 | constant( 'WCML_PLUGIN_URL' ) . '/dist/js/multicurrencyShippingAdmin/app.js', |
| 104 | [], |
| 105 | constant( 'WCML_VERSION' ), |
| 106 | true |
| 107 | ); |
| 108 | } |
| 109 | } |