| 1 |
<?php declare(strict_types=1); |
| 2 |
|
| 3 |
namespace MultiSafepay\WooCommerce\PaymentMethods\Filters; |
| 4 |
|
| 5 |
use MultiSafepay\WooCommerce\Utils\Logger; |
| 6 |
|
| 7 |
/** |
| 8 |
* Filter payment gateways by user role. |
| 9 |
*/ |
| 10 |
class GatewayByUserRole { |
| 11 |
|
| 12 |
/** |
| 13 |
* @var Logger |
| 14 |
*/ |
| 15 |
private $logger; |
| 16 |
|
| 17 |
/** |
| 18 |
* @param Logger|null $logger |
| 19 |
*/ |
| 20 |
public function __construct( ?Logger $logger = null ) { |
| 21 |
$this->logger = $logger ?? new Logger(); |
| 22 |
} |
| 23 |
|
| 24 |
/** |
| 25 |
* Filter the payment methods by user role defined in payment gateway settings. |
| 26 |
* |
| 27 |
* @param array $payment_gateways |
| 28 |
* @return array |
| 29 |
*/ |
| 30 |
public function filter_gateway_per_user_roles( array $payment_gateways ): array { |
| 31 |
$user_roles = is_user_logged_in() ? wp_get_current_user()->roles : array(); |
| 32 |
$current_user_roles_for_log = ! empty( $user_roles ) ? implode( ', ', $user_roles ) : 'guest'; |
| 33 |
|
| 34 |
foreach ( $payment_gateways as $gateway_id => $gateway ) { |
| 35 |
$gateway_settings = is_object( $gateway ) && isset( $gateway->settings ) && is_array( $gateway->settings ) ? $gateway->settings : array(); |
| 36 |
$allowed_user_roles = isset( $gateway_settings['user_roles'] ) ? wp_parse_list( $gateway_settings['user_roles'] ) : array(); |
| 37 |
|
| 38 |
if ( ! empty( $allowed_user_roles ) && ! array_intersect( $user_roles, $allowed_user_roles ) ) { |
| 39 |
$this->logger->log_info( 'Payment method ' . $gateway_id . ' is being unset because the current user roles ' . $current_user_roles_for_log . ' are not allowed. Allowed roles: ' . implode( ', ', $allowed_user_roles ) ); |
| 40 |
unset( $payment_gateways[ $gateway_id ] ); |
| 41 |
} |
| 42 |
} |
| 43 |
|
| 44 |
return $payment_gateways; |
| 45 |
} |
| 46 |
} |
| 47 |
|