, files:int, unprinted:int, total:int} */ public static function waiting( int $listed = self::LIMIT ): array { $ids = array_reverse( Design_Store::orders_where( array( 'status' => array( 'wc-processing' ) ) ) ); $designs = Design_Store::designs_in_orders( $ids ); $missing = array(); foreach ( $designs as $design ) { $missing[ $design->ID ] = Design_Store::missing_print_files( $design->ID ); } $files = static fn( array $listed ): int => array_sum( array_map( static fn( array $design ): int => count( $design['sides'] ) - ( $missing[ $design['design'] ] ?? 0 ), $listed ) ); $orders = array(); foreach ( array_slice( $ids, 0, $listed ) as $id ) { $order = wc_get_order( $id ); if ( ! $order instanceof \WC_Order ) { continue; } $listed = Design_Store::order_designs( $order, $designs ); $orders[] = array( 'order' => $order, 'designs' => $listed, 'files' => $files( $listed ), 'sides' => array_sum( array_map( static fn( array $design ): int => count( $design['sides'] ), $listed ) ), ); } return array( 'orders' => $orders, 'files' => $files( array_map( static fn( \WP_Post $design ): array => array( 'design' => $design->ID, 'sides' => Design_Store::sides( $design->ID ), ), array_values( $designs ) ) ), 'unprinted' => count( array_filter( $missing ) ), 'total' => count( $ids ), ); } /** * What is waiting to print, and, while Pro is not active, what Pro does with it. * * @param int $files Print files waiting. * @param int $orders Orders they are in. * @param bool $pro Whether to say what PrintBlob Pro does with them. */ public static function summary( int $files, int $orders, bool $pro = true ): string { if ( 0 === $orders ) { return __( 'No processing order has a design waiting to print.', 'printblob' ); } if ( 0 === $files ) { /* translators: %d: number of orders. */ return sprintf( _n( 'You have %d order with designs waiting to print.', 'You have %d orders with designs waiting to print.', $orders, 'printblob' ), $orders ); } /* translators: %d: number of print files. */ $files = sprintf( _n( '%d print file', '%d print files', $files, 'printblob' ), $files ); /* translators: %d: number of orders. */ $orders = sprintf( _n( '%d order', '%d orders', $orders, 'printblob' ), $orders ); /* translators: 1: number of print files, as "12 print files", 2: number of orders, as "5 orders". */ $pitch = __( 'You have %1$s in %2$s waiting: with PrintBlob Pro, one ZIP per order.', 'printblob' ); /* translators: 1: number of print files, as "12 print files", 2: number of orders, as "5 orders". */ $plain = __( 'You have %1$s in %2$s waiting to print.', 'printblob' ); return sprintf( $pro ? $pitch : $plain, $files, $orders ); } /** * How many waiting designs have no print file yet, and PrintBlob Pro's control that makes them; nothing when all have one. * * @param int $unprinted Designs without a print file. */ public static function unprinted( int $unprinted ): void { if ( $unprinted < 1 ) { return; } /* translators: %d: number of designs. */ $text = sprintf( _n( '%d design has no print file yet: PrintBlob Pro makes it from the saved design.', '%d designs have no print file yet: PrintBlob Pro makes them from the saved designs.', $unprinted, 'printblob' ), $unprinted ); ?>