id = absint( $shipment ); $this->post = get_post( $this->id ); } elseif ( $shipment instanceof WPDesk_Flexible_Shipping_Shipment ) { $this->id = absint( $shipment->get_id() ); $this->post = $shipment->get_post(); } elseif ( isset( $shipment->ID ) ) { $this->id = absint( $shipment->ID ); $this->post = $shipment; } $this->order = $order; } /** * @return mixed */ public function get_id() { return $this->id; } /** * @return mixed */ public function get_post() { return $this->post; } /** * Set logger. This logger is set by Flexible Shipping plugin. * * @param LoggerInterface $fs_logger . */ public static function set_fs_logger( $fs_logger ) { static::$fs_logger = $fs_logger; } /** * @return string */ public function get_order_metabox_context() { return $this->order_metabox_context; } /** * @param string $order_metabox_context . */ public function set_order_metabox_context( $order_metabox_context ) { $this->order_metabox_context = $order_metabox_context; } /** * @param string $meta_key . */ public function delete_meta( $meta_key ) { unset( $this->meta_data[ $meta_key ] ); $this->meta_data_save_keys[ $meta_key ] = $meta_key; } /** * Saves shipment data to database. */ public function save() { if ( $this->save_post ) { wp_update_post( $this->post ); $this->fs_log( 'debug', 'Shipment post saved', array( 'post' => $this->post ) ); $this->save_post = false; } foreach ( $this->meta_data_save_keys as $key ) { if ( isset( $this->meta_data[ $key ] ) ) { update_post_meta( $this->id, $key, $this->meta_data[ $key ][0] ); $this->fs_log( 'debug', 'Shipment meta data saved', array( 'key' => $key, 'value' => $this->meta_data[ $key ][0], ) ); } else { delete_post_meta( $this->id, $key ); $this->fs_log( 'debug', 'Shipment meta data deleted', array( 'key' => $key ) ); } unset( $this->meta_data_save_keys[ $key ] ); } if ( $this->status_changed ) { do_action( 'flexible_shipping_shipment_status_updated', $this->old_status, $this->post->post_status, $this ); $this->status_changed = false; $this->old_status = null; } } /** * Writes log message to log provided by Flexible Shipping plugin. * * @param mixed $level . * @param string $message . * @param array $context . */ private function fs_log( $level, $message, array $context = array() ) { if ( static::$fs_logger ) { $context['order_id'] = $this->get_order()->get_id(); $context['shipment_id'] = $this->get_id(); $current_user = wp_get_current_user(); $context['user_id'] = $current_user->ID; if ( isset( $_SERVER['REQUEST_URI'] ) ) { $context['request_uri'] = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ); } static::$fs_logger->log( $level, $message, $context ); } } /** * @return WC_Order */ public function get_order() { if ( null === $this->order ) { $this->order = wc_get_order( $this->post->post_parent ); } return $this->order; } /** * @return string|null * Returns integration assigned to shipment */ public function get_integration() { return $this->get_meta( '_integration' ); } /** * @param string $meta_key . * @param null|string $default . * * @return array|string|null */ public function get_meta( $meta_key = '', $default = null ) { $this->load_meta_data(); if ( '' === $meta_key ) { return $this->meta_data; } if ( isset( $this->meta_data[ $meta_key ] ) ) { return maybe_unserialize( $this->meta_data[ $meta_key ][0] ); } else { return $default; } return null; } /** * @return array */ public function get_meta_data() { $this->load_meta_data(); return $this->meta_data; } /** * Loads all meta data from postmeta */ public function load_meta_data() { if ( ! $this->meta_data_loaded ) { $this->meta_data = get_post_meta( $this->id ); $this->meta_data_loaded = true; } } /** * @return string * Returns URL for admin metabox for this shipment */ public function get_order_metabox_url() { return admin_url( 'post.php?post=' . $this->get_order_id() . '&action=edit#shipment_meta_box_' . $this->get_id() ); } /** * @return int */ public function get_order_id() { return $this->post->post_parent; } /** * @return string */ public function get_status_for_shipping_column() { $statuses = array( self::STATUS_FS_NEW => 'new', self::STATUS_FS_CREATED => 'created', self::STATUS_FS_CONFIRMED => 'confirmed', self::STATUS_FS_FAILED => 'error', self::STATUS_FS_MANIFEST => 'manifest', ); return $statuses[ $this->get_status() ]; } /** * @return string */ public function get_status() { return $this->post->post_status; } /** * @return null|string * Returns URL for label */ public function get_label_url() { if ( in_array( $this->get_status(), array( self::STATUS_FS_NEW, self::STATUS_FS_CREATED, self::STATUS_FS_FAILED, ) ) ) { return null; } $label_url_args = array( 'action' => 'flexible_shipping_get_label', 'label_action' => $this->get_label_action(), 'shipment_id' => $this->get_id(), ); $label_url = add_query_arg( $label_url_args, admin_url( 'admin-post.php' ) ); return wp_nonce_url( $label_url, 'flexible_shipping_get_label' ); } /** * Should open label? * By default label should be downloaded. Integration can override this method when label should be opened in browser. * * @return bool */ protected function get_label_action() { return self::LABEL_ACTION_DOWNLOAD; } /** * @param string $new_status . */ public function update_status( $new_status ) { $this->old_status = $this->post->post_status; $this->post->post_status = $new_status; $this->save_post = true; $this->status_changed = true; } /** * @param WPDesk_Flexible_Shipping_Manifest $manifest . */ public function add_to_manifest( WPDesk_Flexible_Shipping_Manifest $manifest ) { $this->set_meta( '_manifest', $manifest->get_id() ); } /** * @param string $meta_key . * @param int|string|array|object|null $value . */ public function set_meta( $meta_key, $value ) { $this->load_meta_data(); if ( ! isset( $this->meta_data[ $meta_key ] ) ) { $this->meta_data[ $meta_key ] = array(); } $this->meta_data[ $meta_key ][0] = $value; $this->meta_data_save_keys[ $meta_key ] = $meta_key; } /** * @return bool */ public function label_avaliable() { if ( in_array( $this->get_status(), array( self::STATUS_FS_CONFIRMED, self::STATUS_FS_MANIFEST ) ) ) { return true; } return false; } /** * Displays shipping column in orders list view. * Must be overwritten! */ public function shipping_column() { echo esc_html( __( 'Please override shipping_column method!', 'flexible-shipping' ) ); echo '
';
		print_r( $this->post );
		echo '
'; echo '
';
		print_r( $this->meta_data );
		echo '
'; } /** * Is status fs-new? * * @return bool */ public function is_status_fs_new() { return self::STATUS_FS_NEW === $this->get_status(); } /** * Is status fs-created? * * @return bool */ public function is_status_fs_created() { return self::STATUS_FS_CREATED === $this->get_status(); } /** * Is status fs-confirmed? * * @return bool */ public function is_status_fs_confirmed() { return self::STATUS_FS_CONFIRMED === $this->get_status(); } /** * Is status fs-failed? * * @return bool */ public function is_status_fs_failed() { return self::STATUS_FS_FAILED === $this->get_status(); } /** * Is status fs-manifest? * * @return bool */ public function is_status_fs_manifest() { return self::STATUS_FS_MANIFEST === $this->get_status(); } /** * Set created via checkout. */ public function set_created_via_checkout() { $this->set_created_via( 'checkout' ); } /** * Set created via. * * @param string $created_via Created via. */ public function set_created_via( $created_via ) { $this->set_meta( self::CREATED_VIA, $created_via ); } /** * Set created via add shipment. */ public function set_created_via_add_shipment() { $this->set_created_via( 'add_shipment' ); } /** * Get created via. * * @return string */ public function get_created_via() { return $this->get_meta( self::CREATED_VIA, self::NOT_SET ); } /** * Set sent via bulk. */ public function set_sent_via_bulk() { $this->set_sent_via( self::SENT_VIA_BULK ); } /** * Set sent via. * * @param string $sent_via . */ public function set_sent_via( $sent_via ) { $this->set_meta( self::SENT_VIA, $sent_via ); } /** * Set sent via auto. */ public function set_sent_via_auto() { $this->set_sent_via( self::SENT_VIA_AUTO ); } /** * Set sent via metabox. */ public function set_sent_via_metabox() { $this->set_sent_via( self::SENT_VIA_METABOX ); } /** * Get sent via. * * @return string */ public function get_sent_via() { return $this->get_meta( self::SENT_VIA, self::NOT_SET ); } /** * Get meta shipping method. * * @return WC_Order_Item_Shipping */ protected function get_meta_shipping_method() { return $this->get_meta( '_shipping_method' ); } }