![]() Server : Apache/2.4.52 (Ubuntu) System : Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64 User : www-data ( 33) PHP Version : 8.1.2-1ubuntu2.21 Disable Function : NONE Directory : /var/www/theprintave/wp-content/plugins/dokan-lite/includes/Order/ |
<?php namespace WeDevs\Dokan\Order; use WC_Order; use WP_REST_Response; // don't call the file directly if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Order admin related hooks * * @since 3.8.0 moved functionality from includes/Admin/Hooks.php file */ class MiscHooks { /** * Class constructor * * @since 3.8.0 */ public function __construct() { // remove customer info from order export based on setting add_filter( 'dokan_csv_export_headers', [ $this, 'hide_customer_info_from_vendor_order_export' ], 20, 1 ); add_filter( 'woocommerce_rest_prepare_shop_order_object', [ $this, 'add_vendor_info_in_rest_order' ], 10, 1 ); add_filter( 'wp_count_posts', [ $this, 'modify_vendor_order_counts' ], 10, 1 ); // no need to add hpos support for this filter } /** * Remove customer sensitive information while exporting order * * @since 3.8.0 Moved this method from Order/Hooks.php file * * @param array $headers * * @return mixed */ public function hide_customer_info_from_vendor_order_export( $headers ) { $hide_customer_info = dokan_get_option( 'hide_customer_info', 'dokan_selling', 'off' ); if ( 'off' !== $hide_customer_info ) { unset( $headers['billing_email'] ); unset( $headers['customer_ip'] ); } return $headers; } /** * Add vendor info in restful wc_order * * @since 3.8.0 Moved this method from includes/functions.php file * * @param WP_REST_Response $response * * @return WP_REST_Response */ public function add_vendor_info_in_rest_order( $response ) { $vendor_ids = []; foreach ( $response as $data ) { if ( empty( $data['line_items'] ) ) { continue; } foreach ( $data['line_items'] as $item ) { $product_id = ! empty( $item['product_id'] ) ? $item['product_id'] : 0; $vendor_id = (int) get_post_field( 'post_author', $product_id ); if ( $vendor_id && ! in_array( $vendor_id, $vendor_ids, true ) ) { array_push( $vendor_ids, $vendor_id ); } } } if ( ! $vendor_ids ) { return $response; } $data = $response->get_data(); foreach ( $vendor_ids as $store_id ) { $store = dokan()->vendor->get( $store_id ); $data['stores'][] = [ 'id' => $store->get_id(), 'name' => $store->get_name(), 'shop_name' => $store->get_shop_name(), 'url' => $store->get_shop_url(), 'address' => $store->get_address(), ]; } // for backward compatibility, if there are multiple vendors, pass empty array. if ( count( $vendor_ids ) > 1 ) { $data['store'] = []; } else { $store = dokan()->vendor->get( $vendor_ids[0] ); $data['store'] = [ 'id' => $store->get_id(), 'name' => $store->get_name(), 'shop_name' => $store->get_shop_name(), 'url' => $store->get_shop_url(), 'address' => $store->get_address(), ]; } $response->set_data( $data ); return $response; } /** * Modify order counts for vendor. * * @since 3.8.0 Moved this method from includes/wc-functions.php file * * @param object $counts * * @return object $counts */ public function modify_vendor_order_counts( $counts ) { global $pagenow; if ( current_user_can( 'manage_woocommerce' ) ) { return $counts; } if ( 'edit.php' !== $pagenow || 'shop_order' !== get_query_var( 'post_type' ) ) { return $counts; } $vendor_id = dokan_get_current_user_id(); if ( empty( $vendor_id ) ) { return $counts; } // Current order counts for the vendor. $vendor_order_counts = dokan_count_orders( $vendor_id ); // Modify WP dashboard order counts as per vendor's order counts. foreach ( $vendor_order_counts as $count_key => $count_value ) { if ( 'total' !== $count_key ) { $counts->{$count_key} = $count_value; } } return $counts; } }