plugin = $plugin; $this->hooks(); } public function hooks() { add_action( 'init', array( $this, 'register_post_types' ), 20 ); add_action( 'init', array( $this, 'flexible_shipping_get_label' ), 9999999 ); add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 20, 2 ); $last_priority = PHP_INT_MAX; add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'create_shipping_for_order' ), $last_priority ); add_action( 'woocommerce_order_details_after_order_table', array( $this, 'woocommerce_order_details_after_order_table' ) ); add_action( 'woocommerce_email_after_order_table', array( $this, 'woocommerce_email_after_order_table' ), 10, 2 ); } /** * Register post types. */ public function register_post_types() { if ( post_type_exists( self::POST_TYPE_SHIPMENT ) ) { return; } register_post_type( self::POST_TYPE_SHIPMENT, array( 'labels' => array( 'name' => __( 'Shipments', 'flexible-shipping' ), 'singular_name' => __( 'Shipment', 'flexible-shipping' ), 'menu_name' => __( 'Shipments', 'flexible-shipping' ), 'parent_item_colon' => '', 'all_items' => __( 'Shipments', 'flexible-shipping' ), 'view_item' => __( 'View Shipments', 'flexible-shipping' ), 'add_new_item' => __( 'Add new Shipment', 'flexible-shipping' ), 'add_new' => __( 'Add new Shipment', 'flexible-shipping' ), 'edit_item' => __( 'Edit Shipment', 'flexible-shipping' ), 'update_item' => __( 'Save Shipment', 'flexible-shipping' ), 'search_items' => __( 'Search Shipments', 'flexible-shipping' ), 'not_found' => __( 'Shipment not found', 'flexible-shipping' ), 'not_found_in_trash' => __( 'Shipment not found in trash', 'flexible-shipping' ) ), 'description' => __( 'Shipments.', 'flexible-shipping' ), 'public' => false, 'show_ui' => false, 'capability_type' => 'post', 'capabilities' => array(), 'map_meta_cap' => true, 'publicly_queryable' => false, 'exclude_from_search' => true, 'hierarchical' => false, 'query_var' => true, 'supports' => array( 'title' ), 'has_archive' => false, 'show_in_nav_menus' => true, 'menu_icon' => 'dashicons-upload', ) ); $shipment_statuses = apply_filters( 'flexible_shipping_register_shipment_statuses', array( 'fs-new' => array( 'label' => _x( 'New', 'Shipment status', 'flexible-shipping' ), 'public' => false, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'New (%s)', 'New (%s)', 'flexible-shipping' ), ), 'fs-created' => array( 'label' => _x( 'Created', 'Shipment status', 'flexible-shipping' ), 'public' => false, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Created (%s)', 'Created (%s)', 'flexible-shipping' ), ), 'fs-confirmed' => array( 'label' => _x( 'Confirmed', 'Shipment status', 'flexible-shipping' ), 'public' => false, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Confirmed (%s)', 'Confirmed (%s)', 'flexible-shipping' ), ), 'fs-manifest' => array( 'label' => _x( 'Manifest created', 'Shipment status', 'flexible-shipping' ), 'public' => false, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Confirmed (%s)', 'Confirmed (%s)', 'flexible-shipping' ), ), 'fs-failed' => array( 'label' => _x( 'Failed', 'Shipment status', 'flexible-shipping' ), 'public' => false, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Failed (%s)', 'Failed (%s)', 'flexible-shipping' ), ), ) ); foreach ( $shipment_statuses as $shipment_status => $values ) { register_post_status( $shipment_status, $values ); } } public function add_meta_boxes( $post_type, $post ) { if ( $post_type == self::POST_TYPE_SHIPMENT ) { add_meta_box( 'shipment_meta_box', __('Shipment data', 'flexible-shipping'), array( $this, 'metabox' ), 'shipment', 'normal', 'high' ); } if ( $post_type == 'shop_order' ) { $shipments = fs_get_order_shipments( $post->ID ); foreach ( $shipments as $shipment ) { $args = array( 'shipment' => $shipment ); add_meta_box( 'shipment_meta_box_' . $shipment->get_id(), $shipment->get_order_metabox_title(), array( $this, 'order_metabox' ), 'shop_order', $shipment->get_order_metabox_context(), 'default', $args ); } } } public function order_metabox( $post, $args ) { /** @var WPDesk_Flexible_Shipping_Shipment $shipment */ $shipment = $args['args']['shipment']; $shipment_id = $shipment->get_id(); $message = $shipment->get_error_message(); $message_heading = $shipment->get_order_metabox_title(); $message_css_style = ''; include( 'views/order-metabox.php' ); } public function metabox() { global $post; echo '
';
        print_r( $post );
        echo '
'; $meta_data = get_post_meta( $post->ID ); foreach ( $meta_data as $key => $val ) { echo '
';
            echo $key;
            echo ' = ';
            print_r( maybe_unserialize( $val[0] ) );
            echo '
'; } } public function flexible_shipping_get_label() { if ( !empty( $_GET['flexible_shipping_get_label'] ) && !empty( $_GET['nonce'] ) ) { $nonce = $_GET['nonce']; if ( !wp_verify_nonce( $nonce, 'flexible_shipping_get_label' ) ) { echo __( 'Invalid nonce!', 'flexible-shipping' ); exit; } try { $shipment_id = $_GET['flexible_shipping_get_label']; $shipment = fs_get_shipment( $shipment_id ); $label_data = $shipment->get_label(); header( "Content-type: application/octet-stream" ); header( "Content-Disposition: attachment; filename=" . $label_data['file_name'] ); echo $label_data['content']; } catch ( Exception $e ) { echo $e->getMessage(); } exit(); } } /** * Get Flexible Shipping method from order shipping method meta data. * * @param WC_Order_Item_Shipping $shipping_method * * @return array */ private function get_fs_method_from_order_shipping_method( $shipping_method ) { $fs_method = array(); if ( version_compare( WC_VERSION, '2.6', '<' ) ) { if ( isset( $shipping_method['item_meta'] ) && isset( $shipping_method['item_meta']['method_id'] ) && isset( $shipping_method['item_meta']['method_id'][0] ) ) { $all_shipping_methods = flexible_shipping_get_all_shipping_methods(); $flexible_shipping = $all_shipping_methods['flexible_shipping']; $flexible_shipping_rates = $flexible_shipping->get_all_rates(); $fs_method = $flexible_shipping_rates[ $shipping_method['item_meta']['method_id'][0] ]; } } if ( version_compare( WC_VERSION, '2.7', '<' ) ) { if ( isset( $shipping_method['item_meta'] ) && isset( $shipping_method['item_meta']['_fs_method'] ) && isset( $shipping_method['item_meta']['_fs_method'][0] ) ) { $fs_method = unserialize( $shipping_method['item_meta']['_fs_method'][0] ); } } else { if ( isset( $shipping_method['item_meta'] ) && isset( $shipping_method['item_meta']['_fs_method'] ) ) { $fs_method = $shipping_method['item_meta']['_fs_method']; } } return $fs_method; } /** * Create shipment for order and shipping method. * * @param WC_Order $order Order. * @param array $fs_method Flexible Shipping shipping method. * @param string $shipping_id Shipping Id. * @param WC_Order_Item_Shipping $shipping_method Shipping method. * @param array $packages Packages. * @param int $package_id Package Id. * * @return WPDesk_Flexible_Shipping_Shipment */ private function create_shipment_for_order_and_fs_shipping_method( WC_Order $order, array $fs_method, $shipping_id, WC_Order_Item_Shipping $shipping_method, array $packages, $package_id ) { $shipment = fs_create_shipment( $order, $fs_method ); $shipment->set_meta( '_fs_method', $fs_method ); $shipment->set_meta( '_shipping_id', $shipping_id ); $shipment->set_meta( '_shipping_method', $shipping_method ); $shipment->set_meta( '_package', $packages[ $package_id ] ); $shipment->set_meta( '_packages', $packages ); $shipment->set_created_via_checkout(); $shipment->checkout( $fs_method, $packages[ $package_id ] ); $shipment->save(); return $shipment; } /** * Create shipping for order. * * @param $order_id */ public function create_shipping_for_order( $order_id ) { $order = wc_get_order( $order_id ); if ( $order && ! $this->is_order_processed_on_checkout ) { $mutex = \FSVendor\WPDesk\Mutex\WordpressPostMutex::fromOrder( $order ); $mutex->acquireLock(); $shipments = fs_get_order_shipments( $order_id ); if ( 0 === count( $shipments ) ) { $this->is_order_processed_on_checkout = true; $order_shipping_methods = $order->get_shipping_methods(); $packages = WC()->shipping->get_packages(); $package_id = - 1; global $fs_package_id; foreach ( $order_shipping_methods as $shipping_id => $shipping_method ) { $package_id ++; $fs_package_id = $package_id; $fs_method = $this->get_fs_method_from_order_shipping_method( $shipping_method ); if ( ! empty( $fs_method['method_integration'] ) ) { if ( fs_shipment_integration_exists( $fs_method['method_integration'] ) ) { $shipment = $this->create_shipment_for_order_and_fs_shipping_method( $order, $fs_method, $shipping_id, $shipping_method, $packages, $package_id ); } } } } $mutex->releaseLock(); } } /** * Hook woocommerce_order_details_after_order_table. * * @param WC_Abstract_Order $order Order. */ public function woocommerce_order_details_after_order_table( $order ) { if ( version_compare( WC_VERSION, '2.7', '<' ) ) { $order_id = $order->id; } else { $order_id = $order->get_id(); } $shipments = fs_get_order_shipments( $order_id ); foreach ( $shipments as $shipment ) { echo $shipment->get_after_order_table(); } } public function woocommerce_email_after_order_table( $order, $sent_to_admin ) { if ( version_compare( WC_VERSION, '2.7', '<' ) ) { $order_id = $order->id; } else { $order_id = $order->get_id(); } $shipments = fs_get_order_shipments( $order_id ); foreach ( $shipments as $shipment ) { echo $shipment->get_email_after_order_table(); } } }