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; } /** * @return WC_Order */ public function get_order() { if ( $this->order == null ) { $this->order = wc_get_order( $this->post->post_parent ); } return $this->order; } /** * @return int */ public function get_order_id() { return $this->post->post_parent; } /** * @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 * @param null|sting $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; } /** * @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; } /** * @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->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] ); } else { delete_post_meta( $this->id, $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; } } /** * 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|null * Returns integration assigned to shipment */ public function get_integration() { return $this->get_meta( '_integration' ); } /** * @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 string */ public function get_status() { return $this->post->post_status; } /** * @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 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 = '?flexible_shipping_get_label=' . $this->get_id() . '&nonce=' . wp_create_nonce( 'flexible_shipping_get_label' ) ; return site_url( $label_url ); } /** * @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; } public function add_to_manifest( WPDesk_Flexible_Shipping_Manifest $manifest ) { $this->set_meta( '_manifest', $manifest->get_id() ); } 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 _( '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.
*
* @param string $created_via Created via.
*/
public function set_created_via( $created_via ) {
$this->set_meta( self::CREATED_VIA, $created_via );
}
/**
* Set created via checkout.
*/
public function set_created_via_checkout() {
$this->set_created_via( 'checkout' );
}
/**
* 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.
*
* @param string $sent_via
*/
public function set_sent_via( $sent_via ) {
$this->set_meta( self::SENT_VIA, $sent_via );
}
/**
* Set sent via bulk.
*/
public function set_sent_via_bulk() {
$this->set_sent_via( self::SENT_VIA_BULK );
}
/**
* 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' );
}
}
}