File "OrderTablePaymentStatusColumn.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce-paypal-payments/modules/ppcp-wc-gateway/src/Admin/OrderTablePaymentStatusColumn.php
File size: 3.82 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Renders the columns to display to the merchant, which orders have been authorized and
* which have not been authorized yet.
*
* @package WooCommerce\PayPalCommerce\WcGateway\Admin
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\WcGateway\Admin;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
use WooCommerce\PayPalCommerce\WcGateway\Processor\AuthorizedPaymentsProcessor;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
/**
* Class OrderTablePaymentStatusColumn
*/
class OrderTablePaymentStatusColumn {
const COLUMN_KEY = 'ppcp_payment_status';
const INTENT = 'authorize';
const AFTER_COLUMN_KEY = 'order_status';
/**
* The settings.
*
* @var Settings
*/
private $settings;
/**
* OrderTablePaymentStatusColumn constructor.
*
* @param Settings $settings The Settings.
*/
public function __construct( Settings $settings ) {
$this->settings = $settings;
}
/**
* Register the columns.
*
* @param array $columns The existing columns.
*
* @return array
*/
public function register( array $columns ): array {
if ( ! $this->settings->has( 'intent' ) || $this->settings->get( 'intent' ) !== self::INTENT ) {
return $columns;
}
$status_column_position = array_search( self::AFTER_COLUMN_KEY, array_keys( $columns ), true );
$to_insert_position = false === $status_column_position ? count( $columns ) : $status_column_position + 1;
$columns = array_merge(
array_slice( $columns, 0, $to_insert_position ),
array(
self::COLUMN_KEY => __( 'Payment Captured', 'woocommerce-paypal-payments' ),
),
array_slice( $columns, $to_insert_position )
);
return $columns;
}
/**
* Render the column.
*
* @param string $column The column.
* @param int $wc_order_id The id or the WooCommerce order.
*/
public function render( string $column, int $wc_order_id ) {
if ( ! $this->settings->has( 'intent' ) || $this->settings->get( 'intent' ) !== self::INTENT ) {
return;
}
if ( self::COLUMN_KEY !== $column ) {
return;
}
$wc_order = wc_get_order( $wc_order_id );
if ( ! is_a( $wc_order, \WC_Order::class ) || ! $this->should_render_for_order( $wc_order ) ) {
return;
}
if ( $this->is_captured( $wc_order ) ) {
$this->render_completed_status();
return;
}
$this->render_incomplete_status();
}
/**
* Whether to render the authorization status of an order or not.
*
* @param \WC_Order $order The WooCommerce order.
*
* @return bool
*/
public function should_render_for_order( \WC_Order $order ): bool {
$intent = $order->get_meta( PayPalGateway::INTENT_META_KEY );
$captured = $order->get_meta( AuthorizedPaymentsProcessor::CAPTURED_META_KEY );
$status = $order->get_status();
$not_allowed_statuses = array( 'refunded' );
return ! empty( $intent ) && strtoupper( self::INTENT ) === strtoupper( $intent ) &&
! empty( $captured ) &&
! in_array( $status, $not_allowed_statuses, true );
}
/**
* Whether the order has been captured or not.
*
* @param \WC_Order $wc_order The WooCommerce order.
*
* @return bool
*/
public function is_captured( \WC_Order $wc_order ): bool {
$captured = $wc_order->get_meta( AuthorizedPaymentsProcessor::CAPTURED_META_KEY );
return wc_string_to_bool( $captured );
}
/**
* Renders the captured status.
*/
private function render_completed_status() {
printf(
'<span class="dashicons dashicons-yes">
<span class="screen-reader-text">%s</span>
</span>',
esc_html__( 'Payment captured', 'woocommerce-paypal-payments' )
);
}
/**
* Renders the "not captured" status.
*/
private function render_incomplete_status() {
printf(
'<mark class="onbackorder">%s</mark>',
esc_html__( 'Not captured', 'woocommerce-paypal-payments' )
);
}
}