id;
}
return 'edit' === $screen->base && 'shop_order' === $screen->post_type;
}
/**
* Enqueue Admin assets.
*
* @return void
*/
public static function admin_assets() {
if ( ! self::is_live_view() ) {
return;
}
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
// JS.
wp_enqueue_script( 'heartbeat' );
wp_enqueue_script( 'orderable-live-view-admin', ORDERABLE_URL . 'inc/modules/live-view/assets/admin/js/main' . $suffix . '.js', [ 'heartbeat', 'jquery' ], ORDERABLE_VERSION, true );
$order_page_url = OrderUtil::custom_orders_table_usage_is_enabled() ? admin_url( 'admin.php?orderable_live_view&page=wc-orders' ) : admin_url( 'edit.php?orderable_live_view&post_type=shop_order' );
$params = array(
'last_order_id' => self::get_last_order_id(),
'filtered_service' => Orderable_Services_Order::get_filtered_service(),
'filtered_due_date' => Orderable_Timings_Order::get_filtered_due_date(),
'orderby' => empty( $_GET['orderby'] ) ? '' : sanitize_text_field( wp_unslash( $_GET['orderby'] ) ), // phpcs:ignore WordPress.Security.NonceVerification
'url' => $order_page_url,
);
wp_localize_script( 'orderable-live-view-admin', 'orderable_live_view_vars', $params );
// CSS.
wp_enqueue_style( 'orderable-live-view-admin', ORDERABLE_URL . 'inc/modules/live-view/assets/admin/css/live-view' . $suffix . '.css', [], ORDERABLE_VERSION );
}
/**
* Remove order list filters.
*/
public static function remove_filters() {
if ( ! self::is_live_view() ) {
return;
}
global $wc_list_table;
remove_action( 'restrict_manage_posts', array( $wc_list_table, 'restrict_manage_posts' ) );
}
/**
* Add to heartbeat response.
*
* @param array $response
* @param array $data
*
* @return mixed
*/
public static function heartbeat_received( $response, $data ) {
if ( ! isset( $data['orderable_heartbeat'] ) || 'orderable_live_view' !== $data['orderable_heartbeat'] ) {
return $response;
}
$response['orderable'] = array(
'last_order_id' => self::get_last_order_id(),
'filtered_service' => $data['orderable_filtered_service'],
'due_date' => $data['orderable_filtered_due_date'],
);
return $response;
}
/**
* Get last order ID.
*
* @return int
*/
public static function get_last_order_id() {
add_filter(
'woocommerce_order_data_store_cpt_get_orders_query',
array( __CLASS__, 'add_location_id_in_order_meta_query' ),
10,
2
);
// phpcs:ignore WordPress.Security.NonceVerification
$location_id = empty( $_POST['data']['orderable_location_id'] ) ? '' : sanitize_text_field( wp_unslash( $_POST['data']['orderable_location_id'] ) );
$orders = wc_get_orders(
array(
'limit' => 1,
'orderable_location_id' => $location_id,
)
);
remove_filter(
'woocommerce_order_data_store_cpt_get_orders_query',
array( __CLASS__, 'add_location_id_in_order_meta_query' )
);
if ( empty( $orders ) ) {
return 0;
}
return $orders[0]->get_id();
}
/**
* Update the order meta query to filter by location ID.
*
* @param array $query WP_Query args from WC_Order_Query.
* @param array $query_vars query vars from a WC_Order_Query.
* @return array
*/
public static function add_location_id_in_order_meta_query( $query, $query_vars ) {
if ( empty( $query_vars['orderable_location_id'] ) ) {
return $query;
}
$location_id = $query_vars['orderable_location_id'];
$meta_query_args = array(
'key' => '_orderable_location_id',
);
$meta_query_args['value'] = $location_id;
$query['meta_query'][] = $meta_query_args;
return $query;
}
/**
* Embed ding sound.
*/
public static function embed_ding() {
if ( ! self::is_live_view() ) {
return;
}
/**
* Allows to override the notification audio file.
*/
$audio_url = apply_filters( 'orderable_live_view_new_order_audio_file_url', esc_url( ORDERABLE_URL ) . 'inc/modules/live-view/assets/audio/ding.wav' );
?>
id ) {
return;
}
$enable_button = sprintf( '%s', admin_url( 'edit.php?post_type=shop_order&orderable_live_view' ), __( 'Enable Live View', 'orderable' ) );
$disable_button = '';
$enable_audio = '';
if ( self::is_live_view() ) {
$disable_button = sprintf( '%s', admin_url( 'edit.php?post_type=shop_order' ), __( 'Exit Live View', 'orderable' ) );
$enable_audio = sprintf( '