Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/woocomme.../src/Blocks/Shipping
File: PickupLocation.php
<?php
[0] Fix | Delete
namespace Automattic\WooCommerce\Blocks\Shipping;
[1] Fix | Delete
[2] Fix | Delete
use WC_Shipping_Method;
[3] Fix | Delete
[4] Fix | Delete
/**
[5] Fix | Delete
* Local Pickup Shipping Method.
[6] Fix | Delete
*/
[7] Fix | Delete
class PickupLocation extends WC_Shipping_Method {
[8] Fix | Delete
[9] Fix | Delete
/**
[10] Fix | Delete
* Pickup locations.
[11] Fix | Delete
*
[12] Fix | Delete
* @var array
[13] Fix | Delete
*/
[14] Fix | Delete
protected $pickup_locations = [];
[15] Fix | Delete
[16] Fix | Delete
/**
[17] Fix | Delete
* Cost
[18] Fix | Delete
*
[19] Fix | Delete
* @var string
[20] Fix | Delete
*/
[21] Fix | Delete
protected $cost = '';
[22] Fix | Delete
[23] Fix | Delete
/**
[24] Fix | Delete
* Constructor.
[25] Fix | Delete
*/
[26] Fix | Delete
public function __construct() {
[27] Fix | Delete
parent::__construct();
[28] Fix | Delete
$this->id = 'pickup_location';
[29] Fix | Delete
$this->method_title = __( 'Local pickup', 'woocommerce' );
[30] Fix | Delete
$this->method_description = __( 'Allow customers to choose a local pickup location during checkout.', 'woocommerce' );
[31] Fix | Delete
$this->init();
[32] Fix | Delete
}
[33] Fix | Delete
[34] Fix | Delete
/**
[35] Fix | Delete
* Init function.
[36] Fix | Delete
*/
[37] Fix | Delete
public function init() {
[38] Fix | Delete
$this->enabled = $this->get_option( 'enabled' );
[39] Fix | Delete
$this->title = $this->get_option( 'title', __( 'Pickup', 'woocommerce' ) );
[40] Fix | Delete
$this->tax_status = $this->get_option( 'tax_status' );
[41] Fix | Delete
$this->cost = $this->get_option( 'cost' );
[42] Fix | Delete
$this->supports = [ 'settings', 'local-pickup' ];
[43] Fix | Delete
$this->pickup_locations = get_option( $this->id . '_pickup_locations', [] );
[44] Fix | Delete
add_filter( 'woocommerce_attribute_label', array( $this, 'translate_meta_data' ), 10, 3 );
[45] Fix | Delete
}
[46] Fix | Delete
[47] Fix | Delete
/**
[48] Fix | Delete
* Checks if a given address is complete.
[49] Fix | Delete
*
[50] Fix | Delete
* @param array $address Address.
[51] Fix | Delete
* @return bool
[52] Fix | Delete
*/
[53] Fix | Delete
protected function has_valid_pickup_location( $address ) {
[54] Fix | Delete
// Normalize address.
[55] Fix | Delete
$address_fields = wp_parse_args(
[56] Fix | Delete
(array) $address,
[57] Fix | Delete
array(
[58] Fix | Delete
'city' => '',
[59] Fix | Delete
'postcode' => '',
[60] Fix | Delete
'state' => '',
[61] Fix | Delete
'country' => '',
[62] Fix | Delete
)
[63] Fix | Delete
);
[64] Fix | Delete
[65] Fix | Delete
// Country is always required.
[66] Fix | Delete
if ( empty( $address_fields['country'] ) ) {
[67] Fix | Delete
return false;
[68] Fix | Delete
}
[69] Fix | Delete
[70] Fix | Delete
// If all fields are provided, we can skip further checks.
[71] Fix | Delete
if ( ! empty( $address_fields['city'] ) && ! empty( $address_fields['postcode'] ) && ! empty( $address_fields['state'] ) ) {
[72] Fix | Delete
return true;
[73] Fix | Delete
}
[74] Fix | Delete
[75] Fix | Delete
// Check validity based on requirements for the country.
[76] Fix | Delete
$country_address_fields = wc()->countries->get_address_fields( $address_fields['country'], 'shipping_' );
[77] Fix | Delete
[78] Fix | Delete
foreach ( $country_address_fields as $field_name => $field ) {
[79] Fix | Delete
$key = str_replace( 'shipping_', '', $field_name );
[80] Fix | Delete
[81] Fix | Delete
if ( isset( $address_fields[ $key ] ) && true === $field['required'] && empty( $address_fields[ $key ] ) ) {
[82] Fix | Delete
return false;
[83] Fix | Delete
}
[84] Fix | Delete
}
[85] Fix | Delete
[86] Fix | Delete
return true;
[87] Fix | Delete
}
[88] Fix | Delete
[89] Fix | Delete
/**
[90] Fix | Delete
* Calculate shipping.
[91] Fix | Delete
*
[92] Fix | Delete
* @param array $package Package information.
[93] Fix | Delete
*/
[94] Fix | Delete
public function calculate_shipping( $package = array() ) {
[95] Fix | Delete
if ( $this->pickup_locations ) {
[96] Fix | Delete
foreach ( $this->pickup_locations as $index => $location ) {
[97] Fix | Delete
if ( ! $location['enabled'] ) {
[98] Fix | Delete
continue;
[99] Fix | Delete
}
[100] Fix | Delete
$this->add_rate(
[101] Fix | Delete
array(
[102] Fix | Delete
'id' => $this->id . ':' . $index,
[103] Fix | Delete
// This is the label shown in shipping rate/method context e.g. London (Local Pickup).
[104] Fix | Delete
'label' => wp_kses_post( $this->title . ' (' . $location['name'] . ')' ),
[105] Fix | Delete
'package' => $package,
[106] Fix | Delete
'cost' => $this->cost,
[107] Fix | Delete
'meta_data' => array(
[108] Fix | Delete
'pickup_location' => wp_kses_post( $location['name'] ),
[109] Fix | Delete
'pickup_address' => $this->has_valid_pickup_location( $location['address'] ) ? wc()->countries->get_formatted_address( $location['address'], ', ' ) : '',
[110] Fix | Delete
'pickup_details' => wp_kses_post( $location['details'] ),
[111] Fix | Delete
),
[112] Fix | Delete
)
[113] Fix | Delete
);
[114] Fix | Delete
}
[115] Fix | Delete
}
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
/**
[119] Fix | Delete
* See if the method is available.
[120] Fix | Delete
*
[121] Fix | Delete
* @param array $package Package information.
[122] Fix | Delete
* @return bool
[123] Fix | Delete
*/
[124] Fix | Delete
public function is_available( $package ) {
[125] Fix | Delete
// phpcs:ignore WooCommerce.Commenting.CommentHooks.MissingHookComment
[126] Fix | Delete
return apply_filters( 'woocommerce_shipping_' . $this->id . '_is_available', 'yes' === $this->enabled, $package, $this );
[127] Fix | Delete
}
[128] Fix | Delete
[129] Fix | Delete
/**
[130] Fix | Delete
* Translates meta data for the shipping method.
[131] Fix | Delete
*
[132] Fix | Delete
* @param string $label Meta label.
[133] Fix | Delete
* @param string $name Meta key.
[134] Fix | Delete
* @param mixed $product Product if applicable.
[135] Fix | Delete
* @return string
[136] Fix | Delete
*/
[137] Fix | Delete
public function translate_meta_data( $label, $name, $product ) {
[138] Fix | Delete
if ( $product ) {
[139] Fix | Delete
return $label;
[140] Fix | Delete
}
[141] Fix | Delete
switch ( $name ) {
[142] Fix | Delete
case 'pickup_location':
[143] Fix | Delete
return __( 'Pickup location', 'woocommerce' );
[144] Fix | Delete
case 'pickup_address':
[145] Fix | Delete
return __( 'Pickup address', 'woocommerce' );
[146] Fix | Delete
case 'pickup_details':
[147] Fix | Delete
return __( 'Pickup details', 'woocommerce' );
[148] Fix | Delete
}
[149] Fix | Delete
return $label;
[150] Fix | Delete
}
[151] Fix | Delete
[152] Fix | Delete
/**
[153] Fix | Delete
* Admin options screen.
[154] Fix | Delete
*
[155] Fix | Delete
* See also WC_Shipping_Method::admin_options().
[156] Fix | Delete
*/
[157] Fix | Delete
public function admin_options() {
[158] Fix | Delete
global $hide_save_button;
[159] Fix | Delete
$hide_save_button = true;
[160] Fix | Delete
[161] Fix | Delete
wp_enqueue_script( 'wc-shipping-method-pickup-location' );
[162] Fix | Delete
[163] Fix | Delete
echo '<h2>' . esc_html__( 'Local pickup', 'woocommerce' ) . '</h2>';
[164] Fix | Delete
echo '<div class="wrap"><div id="wc-shipping-method-pickup-location-settings-container"></div></div>';
[165] Fix | Delete
}
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function