Files
old-experiments/backend/wordpress/wp-content/plugins/woocommerce-jetpack/includes/class-wcj-shipping-by-user-role.php
2018-06-29 14:40:28 +02:00

133 lines
3.8 KiB
PHP
Executable File

<?php
/**
* Booster for WooCommerce - Module - Shipping by User Role
*
* @version 3.6.0
* @since 2.8.0
* @author Algoritmika Ltd.
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if ( ! class_exists( 'WCJ_Shipping_By_User_Role' ) ) :
class WCJ_Shipping_By_User_Role extends WCJ_Module_Shipping_By_Condition {
/**
* Constructor.
*
* @version 3.2.1
* @since 2.8.0
*/
function __construct() {
$this->id = 'shipping_by_user_role';
$this->short_desc = __( 'Shipping Methods by Users', 'woocommerce-jetpack' );
$this->desc = __( 'Set user roles, users or membership plans to include/exclude for shipping methods to show up.', 'woocommerce-jetpack' );
$this->link_slug = 'woocommerce-shipping-methods-by-users';
$this->condition_options = array(
'user_roles' => array(
'title' => __( 'User Roles', 'woocommerce-jetpack' ),
'desc' => sprintf(
__( 'Custom roles can be added via "Add/Manage Custom Roles" tool in Booster\'s <a href="%s">General</a> module.', 'woocommerce-jetpack' ),
admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=emails_and_misc&section=general' )
),
),
'user_id' => array(
'title' => __( 'Users', 'woocommerce-jetpack' ),
'desc' => '',
),
'user_membership' => array(
'title' => __( 'User Membership Plans', 'woocommerce-jetpack' ),
'desc' => sprintf(
__( 'This section requires <a target="_blank" href="%s">WooCommerce Memberships</a> plugin.', 'woocommerce-jetpack' ),
'https://woocommerce.com/products/woocommerce-memberships/'
),
),
);
parent::__construct();
}
/**
* check.
*
* @version 3.6.0
* @since 3.2.0
* @todo use `$package` (and in this case update `wcj_get_left_to_free_shipping()`)
*/
function check( $options_id, $user_roles_or_ids_or_membership_plans, $include_or_exclude, $package ) {
switch( $options_id ) {
case 'user_roles':
if ( ! isset( $this->customer_role ) ) {
$this->customer_role = wcj_get_current_user_first_role();
}
return in_array( $this->customer_role, $user_roles_or_ids_or_membership_plans );
case 'user_id':
if ( ! isset( $this->user_id ) ) {
$this->user_id = get_current_user_id();
}
return in_array( $this->user_id, $user_roles_or_ids_or_membership_plans );
case 'user_membership':
if ( ! isset( $this->user_id ) ) {
$this->user_id = get_current_user_id();
}
if ( ! function_exists( 'wc_memberships_is_user_active_member' ) ) {
return false;
}
foreach ( $user_roles_or_ids_or_membership_plans as $membership_plan ) {
if ( wc_memberships_is_user_active_member( $this->user_id, $membership_plan ) ) {
return true;
}
}
return false;
}
}
/**
* get_condition_options.
*
* @version 3.2.1
* @since 3.2.0
*/
function get_condition_options( $options_id ) {
switch( $options_id ) {
case 'user_roles':
return wcj_get_user_roles_options();
case 'user_id':
return wcj_get_users_as_options();
case 'user_membership':
$membership_plans = array();
$block_size = 512;
$offset = 0;
while( true ) {
$args = array(
'post_type' => 'wc_membership_plan',
'post_status' => 'any',
'posts_per_page' => $block_size,
'offset' => $offset,
'orderby' => 'title',
'order' => 'ASC',
'fields' => 'ids',
);
$loop = new WP_Query( $args );
if ( ! $loop->have_posts() ) {
break;
}
foreach ( $loop->posts as $post_id ) {
$membership_plans[ $post_id ] = get_the_title( $post_id );
}
$offset += $block_size;
}
return $membership_plans;
}
}
}
endif;
return new WCJ_Shipping_By_User_Role();