]; if ( ! isset( $_POST['ship_to_different_address'] ) && count( $types ) == 2 ) { unset( $types[1] ); } foreach ( $types as $type ) { $label = $type_label[ $type ]; foreach ( $fields as $field => $name ) { $key = $type . '_' . $field; if ( isset( $_POST[ $key ] ) && strlen( $_POST[ $key ] ) ) { $value = intval( $_POST[ $key ] ); if ( $value == 0 ) { $message = sprintf( 'لطفا %s %s خود را انتخاب نمایید.', $name, $label ); wc_add_notice( $message, 'error' ); continue; } $invalid = is_null( self::{'get_' . $field}( $value ) ); if ( $invalid ) { $message = sprintf( '%s %s انتخاب شده معتبر نمی باشد.', $name, $label ); wc_add_notice( $message, 'error' ); continue; } if ( $field == 'state' ) { $pkey = $type . '_city'; $cities = self::cities( $value ); if ( isset( $_POST[ $pkey ] ) && ! empty( $_POST[ $pkey ] ) && ! isset( $cities[ $_POST[ $pkey ] ] ) ) { $message = sprintf( 'استان با شهر %s انتخاب شده همخوانی ندارند.', $label ); wc_add_notice( $message, 'error' ); continue; } } } } } } public function cart_shipping_packages( $packages ) { for ( $i = 0; $i < count( $packages ); $i ++ ) { $packages[ $i ]['destination']['is_cod'] = WC()->session->get( 'chosen_payment_method' ) == 'cod'; } return $packages; } public function localisation_address_formats( $formats ) { $formats['IR'] = "{company}\n{first_name} {last_name}\n{country}\n{state}\n{city}\n{address_1}\n{address_2}\n{postcode}"; return $formats; } public function formatted_address_replacements( $replace, $args ) { $replace = parent::formatted_address_replacements( $replace, $args ); if ( ctype_digit( $args['city'] ) ) { $city = $this->get_city( $args['city'] ); $replace['{city}'] = is_null( $city ) ? $args['city'] : $city; } return $replace; } public static function is_enable(): bool { return self::get_option( 'tapin.enable', false ) == 1; } public static function request( $path, $data = [], $absolute_url = null ) { $path = trim( $path, ' / ' ); $url = sprintf( 'https://api.%s/api/%s/', self::$gateways[ self::$gateway ], $path ); if ( ! is_null( $absolute_url ) ) { $url = $absolute_url; } $curl = curl_init(); curl_setopt_array( $curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 1, CURLOPT_TIMEOUT => 10, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode( $data ), CURLOPT_HTTPHEADER => [ "Content-type: application/json", "Accept: application/json", "Authorization: " . PWS()->get_option( 'tapin.token' ), ], ] ); $response = curl_exec( $curl ); if ( $response === false ) { $error = curl_error( $curl ); PWS()->log( __METHOD__ . ' Line: ' . __LINE__ ); PWS()->log( $url ); PWS()->log( $data ); PWS()->log( $error ); curl_close( $curl ); return new WP_Error( '', $error ); } curl_close( $curl ); return json_decode( $response ); } public static function zone() { $zone = get_transient( 'pws_tapin_zone' ); if ( $zone === false || count( (array) $zone ) == 0 ) { $response = wp_remote_get( 'https://public.api.tapin.ir/api/v1/public/state/tree/' ); if ( is_wp_error( $response ) ) { $zone = get_option( 'pws_tapin_zone', null ); if ( is_null( $zone ) ) { $zone = file_get_contents( PWS_DIR . '/data/tapin.json' ); } } else { $data = $response['body']; $data = json_decode( $data, true )['entries']; $zone = []; foreach ( $data as $state ) { $zone[ $state['code'] ] = [ 'title' => trim( $state['title'] ), 'cities' => [], ]; foreach ( $state['cities'] as $city ) { $title = trim( str_replace( '-' . $state['title'], '', $city['title'] ) ); $zone[ $state['code'] ]['cities'][ $city['code'] ] = $title; } } set_transient( 'pws_tapin_zone', $zone, WEEK_IN_SECONDS ); update_option( 'pws_tapin_zone', $zone, false ); } do_action( 'pws_state_city_updated' ); } return $zone; } public static function states() { $states = get_transient( 'pws_tapin_states' ); if ( $states === false || count( (array) $states ) == 0 ) { $zone = self::zone(); $states = []; foreach ( $zone as $code => $state ) { $states[ $code ] = trim( $state['title'] ); } uasort( $states, [ self::class, 'pws_sort_state' ] ); set_transient( 'pws_tapin_states', $states, DAY_IN_SECONDS ); } if ( isset( $states[1018] ) ) { unset( $states[1018] ); } return apply_filters( 'pws_states', $states ); } public static function cities( $state_id = null ) { $cities = get_transient( 'pws_tapin_cities_' . $state_id ); if ( $cities === false || count( (array) $cities ) == 0 ) { $zone = self::zone(); if ( is_null( $state_id ) ) { $state_cities = array_column( self::zone(), 'cities' ); $cities = []; foreach ( $state_cities as $state_city ) { $cities += $state_city; } } else if ( isset( $zone[ $state_id ]['cities'] ) ) { $cities = $zone[ $state_id ]['cities']; asort( $cities ); } else { return []; } set_transient( 'pws_tapin_cities_' . $state_id, $cities, DAY_IN_SECONDS ); } return apply_filters( 'pws_cities', $cities, $state_id ); } public static function get_city( $city_id ) { $cities = self::cities(); return $cities[ $city_id ] ?? null; } public function check_states_beside( $source, $destination ) { if ( $source == $destination ) { return 'in'; } $is_beside[3][16] = true; $is_beside[3][15] = true; $is_beside[3][12] = true; $is_beside[16][3] = true; $is_beside[16][18] = true; $is_beside[16][12] = true; $is_beside[15][3] = true; $is_beside[15][2] = true; $is_beside[15][12] = true; $is_beside[6][24] = true; $is_beside[6][20] = true; $is_beside[6][28] = true; $is_beside[6][11] = true; $is_beside[6][10] = true; $is_beside[6][9] = true; $is_beside[6][30] = true; $is_beside[6][25] = true; $is_beside[6][5] = true; $is_beside[31][1] = true; $is_beside[31][11] = true; $is_beside[31][8] = true; $is_beside[31][13] = true; $is_beside[27][19] = true; $is_beside[27][20] = true; $is_beside[27][4] = true; $is_beside[21][28] = true; $is_beside[21][4] = true; $is_beside[21][5] = true; $is_beside[21][23] = true; $is_beside[1][31] = true; $is_beside[1][11] = true; $is_beside[1][10] = true; $is_beside[1][13] = true; $is_beside[1][9] = true; $is_beside[24][28] = true; $is_beside[24][4] = true; $is_beside[24][20] = true; $is_beside[24][6] = true; $is_beside[30][26] = true; $is_beside[30][22] = true; $is_beside[30][25] = true; $is_beside[30][6] = true; $is_beside[30][9] = true; $is_beside[30][7] = true; $is_beside[7][30] = true; $is_beside[7][29] = true; $is_beside[7][9] = true; $is_beside[29][7] = true; $is_beside[29][14] = true; $is_beside[29][9] = true; $is_beside[4][27] = true; $is_beside[4][21] = true; $is_beside[4][20] = true; $is_beside[4][28] = true; $is_beside[4][24] = true; $is_beside[12][2] = true; $is_beside[12][15] = true; $is_beside[12][3] = true; $is_beside[12][16] = true; $is_beside[12][18] = true; $is_beside[12][17] = true; $is_beside[12][8] = true; $is_beside[9][13] = true; $is_beside[9][1] = true; $is_beside[9][10] = true; $is_beside[9][6] = true; $is_beside[9][29] = true; $is_beside[9][7] = true; $is_beside[9][30] = true; $is_beside[26][30] = true; $is_beside[26][22] = true; $is_beside[26][23] = true; $is_beside[5][6] = true; $is_beside[5][25] = true; $is_beside[5][21] = true; $is_beside[5][23] = true; $is_beside[5][28] = true; $is_beside[5][22] = true; $is_beside[8][12] = true; $is_beside[8][17] = true; $is_beside[8][11] = true; $is_beside[8][31] = true; $is_beside[8][13] = true; $is_beside[8][2] = true; $is_beside[10][1] = true; $is_beside[10][11] = true; $is_beside[10][9] = true; $is_beside[10][6] = true; $is_beside[18][16] = true; $is_beside[18][19] = true; $is_beside[18][17] = true; $is_beside[18][12] = true; $is_beside[22][25] = true; $is_beside[22][5] = true; $is_beside[22][23] = true; $is_beside[22][26] = true; $is_beside[22][30] = true; $is_beside[19][18] = true; $is_beside[19][17] = true; $is_beside[19][20] = true; $is_beside[19][27] = true; $is_beside[28][24] = true; $is_beside[28][4] = true; $is_beside[28][21] = true; $is_beside[28][5] = true; $is_beside[28][6] = true; $is_beside[14][13] = true; $is_beside[14][29] = true; $is_beside[14][9] = true; $is_beside[2][13] = true; $is_beside[2][15] = true; $is_beside[2][12] = true; $is_beside[2][8] = true; $is_beside[20][27] = true; $is_beside[20][19] = true; $is_beside[20][17] = true; $is_beside[20][11] = true; $is_beside[20][6] = true; $is_beside[20][24] = true; $is_beside[20][4] = true; $is_beside[13][14] = true; $is_beside[13][9] = true; $is_beside[13][1] = true; $is_beside[13][31] = true; $is_beside[13][6] = true; $is_beside[13][8] = true; $is_beside[13][2] = true; $is_beside[11][6] = true; $is_beside[11][10] = true; $is_beside[11][1] = true; $is_beside[11][31] = true; $is_beside[11][20] = true; $is_beside[11][8] = true; $is_beside[11][17] = true; $is_beside[23][21] = true; $is_beside[23][5] = true; $is_beside[23][22] = true; $is_beside[23][26] = true; $is_beside[17][19] = true; $is_beside[17][20] = true; $is_beside[17][18] = true; $is_beside[17][11] = true; $is_beside[17][8] = true; $is_beside[17][12] = true; $is_beside[25][5] = true; $is_beside[25][22] = true; $is_beside[25][30] = true; return isset( $is_beside[ $source ][ $destination ] ) && $is_beside[ $source ][ $destination ] === true ? 'beside' : 'out'; } public function get_term_option( $term_id ): array { $option = get_option( 'nabik_taxonomy_tapin_' . $term_id, [] ); return apply_filters( 'pws_get_term_option', $option, $term_id ); } public function set_term_option( $term_id, array $option ) { $option = apply_filters( 'pws_set_term_option', $option, $term_id ); update_option( 'nabik_taxonomy_tapin_' . $term_id, $option ); } public function delete_term_option( $term_id ) { delete_option( 'nabik_taxonomy_tapin_' . $term_id ); } public static function shop() { if ( empty( PWS()->get_option( 'tapin.shop_id' ) ) ) { return new stdClass(); } $shop = get_transient( 'pws_tapin_shop' ); if ( $shop === false || count( (array) $shop ) == 0 ) { $shop = self::request( 'v2/public/shop/detail', [ 'shop_id' => PWS()->get_option( 'tapin.shop_id' ), ] ); if ( is_wp_error( $shop ) ) { return get_option( 'pws_tapin_shop' ); } else { $shop = $shop->entries; } set_transient( 'pws_tapin_shop', $shop, DAY_IN_SECONDS ); update_option( 'pws_tapin_shop', $shop ); } return $shop; } public static function set_gateway( string $gateway ) { if ( in_array( $gateway, array_keys( self::$gateways ) ) ) { self::$gateway = $gateway; } } }
Fatal error: Uncaught Error: Class 'PWS_Tapin' not found in /home/arasetne/public_html/wp-content/plugins/persian-woocommerce-shipping/woocommerce-shipping.php:33 Stack trace: #0 /home/arasetne/public_html/wp-content/plugins/persian-woocommerce-shipping/includes/class-sms.php(14): PWS() #1 /home/arasetne/public_html/wp-content/plugins/persian-woocommerce-shipping/includes/class-sms.php(147): PWS_SMS->__construct() #2 /home/arasetne/public_html/wp-content/plugins/persian-woocommerce-shipping/woocommerce-shipping.php(49): include('/home/arasetne/...') #3 /home/arasetne/public_html/wp-includes/class-wp-hook.php(324): {closure}('') #4 /home/arasetne/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #5 /home/arasetne/public_html/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #6 /home/arasetne/public_html/wp-content/plugins/woocommerce/includes/class-woocommerce.php(205): do_action('woocommerce_loa...') #7 /home/arasetne/public_html/wp-includes/class-wp-hook.php(324): WooCommerce->on_pl in /home/arasetne/public_html/wp-content/plugins/persian-woocommerce-shipping/woocommerce-shipping.php on line 33