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 '';
}
/**
* 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();
}