$order_sev, 'line_severity' => $line_sev, 'loss_making_lines' => $loss, 'summary' => self::summary( $order_sev, $line_sev, $loss, $coverage ), ); } /** * Human-readable dual-context line. * * @param string|null $order_sev Order-level severity. * @param string|null $line_sev Worst line severity. * @param int $loss Loss-making line count. * @param array $coverage Optional coverage flags. * @return string */ public static function summary( $order_sev, $line_sev, $loss = 0, array $coverage = array() ) { if ( ! $order_sev && ! $line_sev ) { return ''; } if ( FreeShippingScope::coverage_excludes_shipping( $coverage ) && 'safe' === $order_sev && ( ! $line_sev || 'safe' === $line_sev ) ) { return FreeShippingScope::safe_label(); } $order_label = $order_sev ? Severity::label( $order_sev ) : '—'; $line_label = $line_sev ? Severity::label( $line_sev ) : '—'; $fully = isset( $coverage['fully_discounted_lines'] ) ? (int) $coverage['fully_discounted_lines'] : 0; // PRD 10.4 / 12.8.3 — free-gift dual-context copy. if ( $fully > 0 && $order_sev && $line_sev && $order_sev !== $line_sev && Severity::CRITICAL === $line_sev ) { return sprintf( /* translators: 1: order severity, 2: line severity */ __( 'Order margin: %1$s · Line risk: %2$s — intentional free gift', 'marginbeacon' ), $order_label, $line_label ); } if ( $order_sev && $line_sev && $order_sev === $line_sev ) { if ( $fully > 0 && Severity::CRITICAL === $line_sev ) { return sprintf( /* translators: 1: severity, 2: count */ _n( 'Order & line risk: %1$s — %2$d fully discounted item', 'Order & line risk: %1$s — %2$d fully discounted items', $fully, 'marginbeacon' ), $order_label, $fully ); } if ( $loss > 1 ) { return sprintf( /* translators: 1: severity, 2: count */ __( 'Order & line risk: %1$s — %2$d items below cost', 'marginbeacon' ), $order_label, $loss ); } return sprintf( /* translators: %s: severity */ __( 'Order & line risk: %s', 'marginbeacon' ), $order_label ); } $extra = ''; if ( $fully > 0 && Severity::CRITICAL === $line_sev ) { $extra = ' — ' . __( 'intentional free gift', 'marginbeacon' ); } elseif ( $loss > 0 && $line_sev && in_array( $line_sev, array( Severity::CRITICAL, Severity::HIGH, Severity::WARNING ), true ) ) { $extra = sprintf( /* translators: %d: count */ _n( ' — %d loss-making item', ' — %d loss-making items', $loss, 'marginbeacon' ), $loss ); } return sprintf( /* translators: 1: order severity, 2: line severity, 3: optional suffix */ __( 'Order margin: %1$s · Line risk: %2$s%3$s', 'marginbeacon' ), $order_label, $line_label, $extra ); } }