File "UserRole.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/flexible-shipping-pro/src/WPDesk/FSPro/TableRate/Rule/Condition/UserRole.php
File size: 4.28 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Class UserRole
*
* @package WPDesk\FSPro\TableRate\Rule\Condition
*/
namespace WPDesk\FSPro\TableRate\Rule\Condition;
use FSProVendor\WPDesk\Forms\Field;
use FSProVendor\WPDesk\Forms\Field\WooSelect;
use Psr\Log\LoggerInterface;
use WPDesk\FS\TableRate\Rule\Condition\AbstractCondition;
use WPDesk\FS\TableRate\Rule\ShippingContents\ShippingContents;
/**
* User Role condition.
*/
class UserRole extends AbstractCondition {
use ConditionOperators;
const CONDITION_ID = 'user_role';
const ROLE_GUEST_ID = 'guest';
/**
* TimeOfTheDay constructor.
*
* @param int $priority .
*/
public function __construct( $priority = 10 ) {
$this->condition_id = self::CONDITION_ID;
$this->name = __( 'User Role', 'flexible-shipping-pro' );
$this->group = __( 'User', 'flexible-shipping-pro' );
$this->description = __( 'Shipping cost based on the selected user role', 'flexible-shipping-pro' );
$this->priority = $priority;
}
/**
* @param array $condition_settings .
* @param ShippingContents $contents .
* @param LoggerInterface $logger .
*
* @return bool
*/
public function is_condition_matched( array $condition_settings, ShippingContents $contents, LoggerInterface $logger ) {
$roles = isset( $condition_settings[ self::CONDITION_ID ] ) ? wp_parse_list( $condition_settings[ self::CONDITION_ID ] ) : [];
$condition_matched = $this->has_user_roles( $roles );
$condition_matched = $this->apply_is_not_operator( $condition_matched, $this->get_operator_from_settings( $condition_settings ) );
$logger->debug( $this->format_for_log( $condition_settings, $condition_matched, [ 'user_roles' => $roles ] ) );
return $condition_matched;
}
/**
* @param array $condition_settings .
* @param bool $condition_matched .
* @param array $input_data .
*
* @return string
*/
protected function format_for_log( array $condition_settings, $condition_matched, $input_data ) {
// Translators: condition name.
$formatted_for_log = ' ' . sprintf( __( 'Condition: %1$s;', 'flexible-shipping-pro' ), $this->get_name() );
// Translators: operator.
$formatted_for_log .= sprintf( __( ' operator: %1$s;', 'flexible-shipping-pro' ), $this->get_operator_label( $this->get_operator_from_settings( $condition_settings, 'all' ) ) );
$formatted_for_log .= sprintf( ' %1$s: %2$s;', __( 'user role', 'flexible-shipping-pro' ), implode( ', ', $input_data['user_roles'] ), 'flexible-shipping-pro' ); // phpcs:ignore.
// Translators: input data.
$formatted_for_log .= sprintf( __( ' input data: %1$s;', 'flexible-shipping-pro' ), implode( ', ', $this->get_current_user_roles() ), 'flexible-shipping-pro' ); // phpcs:ignore.
// Translators: matched condition.
$formatted_for_log .= sprintf( __( ' matched: %1$s', 'flexible-shipping-pro' ), ( $condition_matched ) ? __( 'yes', 'flexible-shipping-pro' ) : __( 'no', 'flexible-shipping-pro' ) );
return $formatted_for_log;
}
/**
* @return Field[]
*/
public function get_fields() {
return [
$this->prepare_operator_is(),
( new WooSelect() )
->set_name( self::CONDITION_ID )
->set_multiple()
->add_class( 'user_role' )
->set_options( $this->get_prepared_roles() )
->set_label( _x( 'one of', 'user role', 'flexible-shipping-pro' ) ),
];
}
/**
* @param string[] $roles .
*
* @return bool
*/
private function has_user_roles( $roles ) {
$user_roles = $this->get_current_user_roles();
foreach ( $roles as $role ) {
if ( in_array( $role, $user_roles, true ) ) {
return true;
}
}
return false;
}
/**
* @return string[]
*/
private function get_current_user_roles() {
$user = wp_get_current_user();
if ( $user && is_user_logged_in() ) {
return $user->roles;
}
return [ self::ROLE_GUEST_ID ];
}
/**
* @return array<int, string[]>
*/
private function get_prepared_roles() {
$roles = [];
foreach ( $this->get_roles() as $id => $name ) {
$roles[] = [
'value' => $id,
'label' => $name,
];
}
return $roles;
}
/**
* @return array<string, string>
*/
private function get_roles() {
$roles = array_map( 'translate_user_role', wp_list_pluck( get_editable_roles(), 'name' ) );
$roles[ self::ROLE_GUEST_ID ] = __( 'Guest (Not logged in user)', 'flexible-shipping-pro' );
return $roles;
}
}