관리-도구
편집 파일: ShippingLabelBanner.php
<?php /** * Kkart Shipping Label banner. * NOTE: DO NOT edit this file in Kkart core, this is generated from kkart-admin. */ namespace Automattic\Kkart\Admin\Features; use \Automattic\Kkart\Admin\Loader; /** * Shows print shipping label banner on edit order page. */ class ShippingLabelBanner { /** * Singleton for the display rules class * * @var ShippingLabelBannerDisplayRules */ private $shipping_label_banner_display_rules; /** * Constructor */ public function __construct() { add_filter( 'kkart_admin_plugins_whitelist', array( $this, 'get_shipping_banner_allowed_plugins' ), 10, 2 ); if ( ! is_admin() ) { return; } add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 6, 2 ); } /** * Gets an array of plugins that can be installed & activated via shipping label prompt. * * @param array $plugins Array of plugin slugs to be allowed. * * @return array */ public static function get_shipping_banner_allowed_plugins( $plugins ) { $shipping_banner_plugins = array( 'kkart-services' => 'kkart-services/kkart-services.php', ); return array_merge( $plugins, $shipping_banner_plugins ); } /** * Check if Kkart Shipping makes sense for this merchant. * * @return bool */ private function should_show_meta_box() { if ( ! $this->shipping_label_banner_display_rules ) { $jetpack_version = null; $jetpack_connected = null; $wcs_version = null; $wcs_tos_accepted = null; if ( class_exists( '\Jetpack_Data' ) ) { $user_token = \Jetpack_Data::get_access_token( JETPACK_MASTER_USER ); $jetpack_connected = isset( $user_token->external_user_id ); $jetpack_version = JETPACK__VERSION; } if ( class_exists( '\KKART_Connect_Loader' ) ) { $wcs_version = \KKART_Connect_Loader::get_wcs_version(); } if ( class_exists( '\KKART_Connect_Options' ) ) { $wcs_tos_accepted = \KKART_Connect_Options::get_option( 'tos_accepted' ); } $incompatible_plugins = class_exists( '\KKART_Shipping_Fedex_Init' ) || class_exists( '\KKART_Shipping_UPS_Init' ) || class_exists( '\KKART_Integration_ShippingEasy' ) || class_exists( '\KKART_ShipStation_Integration' ); $this->shipping_label_banner_display_rules = new ShippingLabelBannerDisplayRules( $jetpack_version, $jetpack_connected, $wcs_version, $wcs_tos_accepted, $incompatible_plugins ); } return $this->shipping_label_banner_display_rules->should_display_banner(); } /** * Add metabox to order page. * * @param string $post_type current post type. * @param \WP_Post $post Current post object. */ public function add_meta_boxes( $post_type, $post ) { $order = kkart_get_order( $post ); if ( $this->should_show_meta_box() ) { add_meta_box( 'kkart-admin-print-label', __( 'Shipping Label', 'kkart' ), array( $this, 'meta_box' ), null, 'normal', 'high', array( 'context' => 'shipping_label', 'order' => $post->ID, 'items' => $this->count_shippable_items( $order ), ) ); add_action( 'admin_enqueue_scripts', array( $this, 'add_print_shipping_label_script' ) ); } } /** * Count shippable items * * @param \KKART_Order $order Current order. * @return int */ private function count_shippable_items( \KKART_Order $order ) { $count = 0; foreach ( $order->get_items() as $item ) { if ( $item instanceof \KKART_Order_Item_Product ) { $product = $item->get_product(); if ( $product && $product->needs_shipping() ) { $count += $item->get_quantity(); } } } return $count; } /** * Adds JS to order page to render shipping banner. * * @param string $hook current page hook. */ public function add_print_shipping_label_script( $hook ) { $rtl = is_rtl() ? '.rtl' : ''; wp_enqueue_style( 'print-shipping-label-banner-style', Loader::get_url( "print-shipping-label-banner/style{$rtl}", 'css' ), array( 'wp-components' ), Loader::get_file_version( 'css' ) ); wp_enqueue_script( 'print-shipping-label-banner', Loader::get_url( 'wp-admin-scripts/print-shipping-label-banner', 'js' ), array( 'wp-i18n', 'wp-data', 'wp-element', 'moment', 'wp-api-fetch', KKART_ADMIN_APP ), Loader::get_file_version( 'js' ), true ); $payload = array( 'nonce' => wp_create_nonce( 'wp_rest' ), 'baseURL' => get_rest_url(), 'wcs_server_connection' => true, ); wp_localize_script( 'print-shipping-label-banner', 'wcConnectData', $payload ); } /** * Render placeholder metabox. * * @param \WP_Post $post current post. * @param array $args empty args. */ public function meta_box( $post, $args ) { ?> <div id="kkart-admin-shipping-banner-root" class="kkart <?php echo esc_attr( 'kkart-admin-shipping-banner' ); ?>" data-args="<?php echo esc_attr( wp_json_encode( $args['args'] ) ); ?>"> </div> <?php } }