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( '