includes(); $this->plugin_file = __FILE__; $this->plugin_dir = untrailingslashit( plugin_dir_path( __FILE__ ) ); $this->plugin_url = untrailingslashit( plugin_dir_url( __FILE__ ) ); $options = get_option('4Seller_option_name'); if (!is_array($options)) { $options = array(); } $this->couriers = isset($options['couriers']) ? $options['couriers'] : ''; add_action('admin_print_scripts', array(&$this, 'library_scripts')); add_action('in_admin_footer', array(&$this, 'include_footer_script')); add_action('admin_print_styles', array(&$this, 'admin_styles')); add_action('add_meta_boxes', array(&$this, 'add_meta_box')); add_action('woocommerce_process_shop_order_meta', array(&$this, 'save_meta_box'), 0, 2); add_filter( 'manage_shop_order_posts_columns', array(&$this, 'shop_order_columns' ), 99 ); add_action( 'manage_shop_order_posts_custom_column', array(&$this, 'render_shop_order_columns' ) ); add_filter( 'manage_woocommerce_page_wc-orders_columns', array(&$this, 'shop_order_columns' ), 99 ); add_action( 'manage_woocommerce_page_wc-orders_custom_column', array(&$this, 'render_wc_orders_list_columns' ), 10, 2 ); add_action('woocommerce_view_order', array(&$this, 'display_tracking_info')); add_action('woocommerce_email_before_order_table', array(&$this, 'email_display'), 10, 4); } private function includes() { global $four_seller_fields; include_once __DIR__ . '/includes/4Seller-fields.php'; $this->four_seller_fields = $four_seller_fields; include_once __DIR__ . '/includes/class-4Seller-settings.php'; } public function admin_styles() { if (wp_style_is('select2', 'registered')) { wp_enqueue_style('select2'); } wp_enqueue_style('4Seller_styles', $this->plugin_url . '/assets/css/admin.css', array(), FOUR_SELLER_VERSION); } public function library_scripts() { if (wp_script_is('selectWoo', 'registered')) { wp_enqueue_script('selectWoo'); } wp_enqueue_script('4Seller_script_util', $this->plugin_url . '/assets/js/util.js', array('jquery'), FOUR_SELLER_VERSION, true); wp_enqueue_script('4Seller_script_couriers', $this->plugin_url . '/assets/js/couriers.js', array('jquery'), FOUR_SELLER_VERSION, true); wp_enqueue_script('4Seller_script_admin', $this->plugin_url . '/assets/js/admin.js', array('jquery'), FOUR_SELLER_VERSION, true); } public function include_footer_script() { wp_enqueue_script('4Seller_script_footer', $this->plugin_url . '/assets/js/footer.js', array(), FOUR_SELLER_VERSION, true); } /** * Add the meta box for shipment info on the order page * * @access public */ public function add_meta_box() { add_meta_box('woocommerce-4Seller', __('4Seller', '4seller-tracking-number-manager'), array( $this, 'meta_box' ), four_seller_get_order_admin_screen(), 'side', 'high'); } /** * Show the meta box for shipment info on the order page * * @access public */ public function meta_box($post) { if ($post instanceof WC_Order) { $order = $post; } else { $order_id = isset($post->ID) ? $post->ID : 0; $order = wc_get_order($order_id); } if (!$order) { return; } $selected_provider = $order->get_meta("_4Seller_tracking_provider"); echo '
'; wp_nonce_field('save_4Seller_tracking', '4Seller_tracking_nonce'); echo '


'; echo '
Update carrier list'; echo ''; echo ''; foreach ($this->four_seller_fields as $field) { $wrapper_class = ''; if (strpos($field['class'], 'hidden-field') !== false || $field['class'] === 'hidden') { $wrapper_class = '4seller-hidden-field'; } if ($field['type'] == 'date') { woocommerce_wp_text_input(array( 'id' => $field['id'], 'label' => $field['label'], 'placeholder' => $field['placeholder'], 'description' => $field['description'], 'class' => $field['class'], 'wrapper_class' => $wrapper_class, 'value' => ($date = $order->get_meta('_' . $field['id'])) ? gmdate('Y-m-d', $date) : '' )); } else { woocommerce_wp_text_input(array( 'id' => $field['id'], 'label' => $field['label'], 'placeholder' => $field['placeholder'], 'description' => $field['description'], 'class' => $field['class'], 'wrapper_class' => $wrapper_class, 'value' => $order->get_meta('_' . $field['id']), )); } } echo '

'; } /** * Order Downloads Save * * Function for processing and storing all order downloads. */ public function save_meta_box($post_id, $post = null) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } $nonce = isset($_POST['4Seller_tracking_nonce']) ? sanitize_text_field(wp_unslash($_POST['4Seller_tracking_nonce'])) : ''; if (!$nonce || !wp_verify_nonce($nonce, 'save_4Seller_tracking')) { return; } if (!current_user_can('edit_shop_order', $post_id) && !current_user_can('edit_post', $post_id)) { return; } $tracking_number_raw = filter_input(INPUT_POST, '4Seller_tracking_number', FILTER_UNSAFE_RAW); if (null !== $tracking_number_raw) { $order = wc_get_order( $post_id ); if (!$order) { return; } $tracking_provider_raw = filter_input(INPUT_POST, '4Seller_tracking_provider', FILTER_UNSAFE_RAW); $tracking_provider = null !== $tracking_provider_raw ? wc_clean(wp_unslash($tracking_provider_raw)) : ''; $tracking_number = wc_clean(wp_unslash($tracking_number_raw)); $order->update_meta_data( '_4Seller_tracking_provider', $tracking_provider ); $order->update_meta_data( '_4Seller_tracking_number', $tracking_number ); foreach ($this->four_seller_fields as $field) { $field_id = isset($field['id']) ? (string) $field['id'] : ''; $field_raw = $field_id ? filter_input(INPUT_POST, $field_id, FILTER_UNSAFE_RAW) : null; $field_value = null !== $field_raw ? wc_clean(wp_unslash($field_raw)) : ''; if ($field['type'] == 'date') { $order->update_meta_data( '_' . $field['id'], $field_value ? strtotime($field_value) : '' ); } else { $order->update_meta_data( '_' . $field['id'], $field_value ); } } if (four_seller_custom_orders_table_usage_is_enabled()) { $order->save(); } else { $order->save_meta_data(); } } } /** * Display Shipment info in the frontend (order view/tracking page). * * @access public */ function display_tracking_info($order_id, $for_email = false, $plain_text = false) { $this->display_order($order_id, $for_email, $plain_text); } /** * Define shipment tracking column in admin orders list. * * @param array $columns Existing columns * * @return array Altered columns */ public function shop_order_columns( $columns ) { $add_index = array_search( 'order_number', array_keys( $columns ) ) + 1; $pre_array = array_splice( $columns, 0, $add_index ); $array = array( '4Seller_traccking_no' => "Tracking No" ); return array_merge( $pre_array, $array, $columns ); } /** * Render shipment tracking in custom column. * * @param string $column Current column */ public function render_shop_order_columns( $column ) { global $post; if ( '4Seller_traccking_no' === $column ) { echo wp_kses_post( $this->get_tracking_column( $post->ID ) ); } } public function render_wc_orders_list_columns( $column_name, $order ) { if ( '4Seller_traccking_no' === $column_name ) { echo wp_kses_post( $this->get_tracking_column( $order->get_id() ) ); } } public function get_tracking_no( $order_id ) { if ( version_compare( WC_VERSION, '3.0', '<' ) ) { $tracking_no = get_post_meta( $order_id, '_4Seller_tracking_number', true ); } else { $order = wc_get_order( $order_id ); $tracking_no = $order ? $order->get_meta( '_4Seller_tracking_number' ) : ''; } return $tracking_no; } public function get_tracking_column( $order_id ) { $tracking_no = $this->get_tracking_no( $order_id ); if (!empty($tracking_no)) { return esc_html($tracking_no); } else { return '-'; } } private function display_order($order_id, $for_email, $plain_text = false) { $values = array(); $order = wc_get_order($order_id); if (!$order) { return; } foreach ($this->four_seller_fields as $field) { $values[$field['id']] = $order->get_meta('_' . $field['id']); if ($field['type'] == 'date' && $values[$field['id']]) { $values[$field['id']] = date_i18n(__('l jS F Y', '4seller-tracking-number-manager'), $values[$field['id']]); } } $values['4Seller_tracking_provider'] = $order->get_meta('_4Seller_tracking_provider'); if (!$values['4Seller_tracking_number']) return; $options = get_option('4Seller_option_name'); if (!is_array($options)) { $options = array(); } if (array_key_exists('track_message_1', $options) && array_key_exists('track_message_2', $options)) { $track_message_1 = $options['track_message_1']; $track_message_2 = $options['track_message_2']; } else { $track_message_1 = 'Your order was shipped via '; $track_message_2 = 'Tracking number is '; } $required_fields_values = array(); $provider_required_fields = explode(",", $values['4Seller_tracking_required_fields']); for ($i = 0; $i < count($provider_required_fields); $i++) { $field = $provider_required_fields[$i]; foreach ($this->four_seller_fields as $four_seller_field) { if (array_key_exists('key', $four_seller_field) && $field == $four_seller_field['key']) { if (!empty($values[$four_seller_field['id']])) { array_unshift($required_fields_values, $values[$four_seller_field['id']]); } } } } if (count($required_fields_values)) { $required_fields_msg = ' (' . join(', ', $required_fields_values) . ')'; } else { $required_fields_msg = ''; } $tracking_provider_name = $values['4Seller_tracking_provider_name'] ? $values['4Seller_tracking_provider_name'] : $values['4Seller_tracking_provider']; $tracking_url = $this->get_tracking_url($values['4Seller_tracking_provider'], $values['4Seller_tracking_number']); if ($plain_text) { if ($tracking_provider_name) { echo esc_html($track_message_1 . $tracking_provider_name) . "\n"; } echo esc_html($track_message_2 . $values['4Seller_tracking_number'] . $required_fields_msg) . "\n"; echo esc_url($tracking_url) . "\n"; return; } echo '
'; if ($tracking_provider_name) { echo esc_html($track_message_1 . $tracking_provider_name) . '
'; } echo esc_html($track_message_2) . '' . esc_html($values['4Seller_tracking_number']) . '.' . esc_html($required_fields_msg); echo '
'; } /** * Display shipment info in customer emails. * * @access public * @return void */ function email_display($order, $sent_to_admin = false, $plain_text = false, $email = null) { $order_id = is_object($order) && method_exists($order, 'get_id') ? $order->get_id() : (isset($order->id) ? $order->id : 0); $this->display_tracking_info($order_id, true, $plain_text); } private function get_tracking_url($tracking_provider, $tracking_number) { $tracking_number = (string) $tracking_number; return 'https://t.17track.net/zh-cn#nums=' . rawurlencode($tracking_number) . '&pf=wc_d&pf_c=' . rawurlencode((string) $tracking_provider); } } if (!function_exists( 'four_seller_get_instance' )) { function four_seller_get_instance() { return Four_Seller_Plugin::Instance(); } } } /** * Register this class globally */ $GLOBALS['4Seller'] = four_seller_get_instance(); }