- WordPress core y plugins - Tema Twenty Twenty-Four configurado - Plugin allow-unfiltered-html.php simplificado - .gitignore configurado para excluir wp-config.php y uploads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1080 lines
23 KiB
PHP
1080 lines
23 KiB
PHP
<?php
|
|
/**
|
|
* RCP Member class
|
|
*
|
|
* @package Restrict Content Pro
|
|
* @subpackage Classes/Member
|
|
* @copyright Copyright (c) 2017, Restrict Content Pro
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
|
* @since 2.1
|
|
*/
|
|
|
|
/**
|
|
* Class RCP_Member
|
|
*
|
|
* @deprecated 3.0 Use RCP_Customer instead.
|
|
* @see RCP_Customer
|
|
*/
|
|
class RCP_Member extends WP_User {
|
|
|
|
/**
|
|
* New customer object for this user.
|
|
*
|
|
* @var RCP_Customer $customer
|
|
*
|
|
* @access private
|
|
* @since 3.0
|
|
*/
|
|
private $customer = false;
|
|
|
|
/**
|
|
* New membership object for this user.
|
|
*
|
|
* @var RCP_Membership|false $membership
|
|
*
|
|
* @access private
|
|
* @since 3.0
|
|
*/
|
|
private $membership = false;
|
|
|
|
/**
|
|
* Get the new RCP_Customer object for this user.
|
|
*
|
|
* @param bool $create Whether or not to create a new customer if one doesn't already exist.
|
|
*
|
|
* @access private
|
|
* @since 3.0
|
|
* @return RCP_Customer|false
|
|
*/
|
|
private function get_customer( $create = false ) {
|
|
|
|
if ( ! is_object( $this->customer ) ) {
|
|
$this->customer = rcp_get_customer_by_user_id( $this->ID );
|
|
|
|
if ( empty( $this->customer ) && ! empty( $create ) ) {
|
|
// Create a new customer.
|
|
$customer_id = rcp_add_customer( array( 'user_id' => $this->ID ) );
|
|
|
|
if ( ! empty( $customer_id ) ) {
|
|
$this->customer = rcp_get_customer( $customer_id );
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->customer;
|
|
|
|
}
|
|
|
|
/**
|
|
* Get this user's membership. This returns ONE membership only - the first one this user had. This is done for
|
|
* backwards compatibility purposes for when we introduce multiple memberships but functions still expect one
|
|
* result and not an array.
|
|
*
|
|
* @param bool $create Whether or not to create a new membership if one doesn't already exist. We set this to `true`
|
|
* in all the SET functions. Otherwise it's `false`.
|
|
*
|
|
* @access private
|
|
* @since 3.0
|
|
* @return RCP_Membership|false
|
|
*/
|
|
private function get_membership( $create = false ) {
|
|
|
|
if ( ! is_object( $this->membership ) ) {
|
|
$customer = $this->get_customer( $create );
|
|
|
|
if ( is_object( $customer ) ) {
|
|
$this->membership = rcp_get_customer_single_membership( $customer->get_id() );
|
|
|
|
if ( empty( $this->membership ) && ! empty( $create ) ) {
|
|
$membership_id = rcp_add_membership( array( 'customer_id' => $customer->get_id() ) );
|
|
|
|
if ( ! empty( $membership_id ) ) {
|
|
$this->membership = rcp_get_membership( $membership_id );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->membership;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the status of the member
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return string
|
|
*/
|
|
public function get_status() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
if ( ! $membership->is_paid() && $membership->is_active() ) {
|
|
// Backwards compatible support for "free" status.
|
|
$status = 'free';
|
|
} else {
|
|
// All other statuses.
|
|
$status = $membership->get_status();
|
|
}
|
|
} else {
|
|
$status = apply_filters( 'rcp_member_get_status', 'free', $this->ID, $this );
|
|
}
|
|
|
|
return $status;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the status of a member
|
|
*
|
|
* @param string $new_status New status to set.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool Whether or not the status was updated.
|
|
*/
|
|
public function set_status( $new_status = '' ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
return $membership->set_status( $new_status );
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the expiration date of the member
|
|
*
|
|
* @param bool $formatted Whether or not the returned value should be formatted.
|
|
* @param bool $pending Whether or not to check the pending expiration date.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return string
|
|
*/
|
|
public function get_expiration_date( $formatted = true, $pending = true ) {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$expiration = $membership->get_expiration_date( $formatted );
|
|
} else {
|
|
$expiration = apply_filters( 'rcp_member_get_expiration_date', false, $this->ID, $this, $formatted, $pending );
|
|
}
|
|
|
|
return $expiration;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the expiration date of the member as a timestamp
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return int|false
|
|
*/
|
|
public function get_expiration_time() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$timestamp = $membership->get_expiration_time();
|
|
} else {
|
|
$timestamp = apply_filters( 'rcp_member_get_expiration_time', false, $this->ID, $this );
|
|
}
|
|
|
|
return $timestamp;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the expiration date for a member
|
|
*
|
|
* Should be passed as a MYSQL date string.
|
|
*
|
|
* @param string $new_date New date as a MySQL date string.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool Whether or not the expiration date was updated.
|
|
*/
|
|
public function set_expiration_date( $new_date = '' ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
return $membership->set_expiration_date( $new_date );
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Calculates the new expiration date for a member
|
|
*
|
|
* @param bool $force_now Whether or not to force an update.
|
|
* @param bool $trial Whether or not this is for a free trial.
|
|
*
|
|
* @access public
|
|
* @since 2.4
|
|
* @return String Date in Y-m-d H:i:s format or "none" if is a lifetime member
|
|
*/
|
|
public function calculate_expiration( $force_now = false, $trial = false ) {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
return $membership->calculate_expiration( $force_now, $trial );
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the joined date for a member
|
|
*
|
|
* @param string $date Join date in MySQL date format.
|
|
* @param int $subscription_id ID of the subscription level.
|
|
*
|
|
* @access public
|
|
* @since 2.6
|
|
* @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
|
|
*/
|
|
public function set_joined_date( $date = '', $subscription_id = 0 ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( empty( $membership ) ) {
|
|
return false;
|
|
}
|
|
|
|
if( empty( $date ) ) {
|
|
$date = date( 'Y-m-d H:i:s', current_time( 'timestamp' ) );
|
|
}
|
|
|
|
$ret = rcp_update_membership( $membership->get_id(), array( 'created_date' => $date ) );
|
|
|
|
/**
|
|
* @deprecated 3.0
|
|
*/
|
|
do_action( 'rcp_set_joined_date', $this->ID, $date, $this );
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the joined date for a subscription
|
|
*
|
|
* @param int $subscription_id ID of the subscription level.
|
|
*
|
|
* @access public
|
|
* @since 2.6
|
|
* @return string Joined date
|
|
*/
|
|
public function get_joined_date( $subscription_id = 0 ) {
|
|
|
|
$date = false;
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$date = $membership->get_created_date( false );
|
|
}
|
|
|
|
return apply_filters( 'rcp_get_joined_date', $date, $this->ID, $subscription_id, $this );
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the renewed date for a member
|
|
*
|
|
* @param string $date Renewed date in MySQL format.
|
|
*
|
|
* @access public
|
|
* @since 2.6
|
|
* @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
|
|
*/
|
|
public function set_renewed_date( $date = '' ) {
|
|
|
|
if( get_user_meta( $this->ID, '_rcp_new_subscription', true ) ) {
|
|
return; // This is a new subscription so do not set anything
|
|
}
|
|
|
|
if( empty( $date ) ) {
|
|
$date = date( 'Y-m-d H:i:s' );
|
|
}
|
|
|
|
$membership = $this->get_membership(false );
|
|
|
|
if ( empty( $membership ) ) {
|
|
$ret = false;
|
|
} else {
|
|
$ret = $membership->set_renewed_date( $date );
|
|
}
|
|
|
|
do_action( 'rcp_set_renewed_date', $this->ID, $date, $this );
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the renewed date for a subscription
|
|
*
|
|
* @param int $subscription_id ID of the subscription level.
|
|
*
|
|
* @access public
|
|
* @since 2.6
|
|
* @return string Renewed date
|
|
*/
|
|
public function get_renewed_date( $subscription_id = 0 ) {
|
|
|
|
if( empty( $subscription_id ) ) {
|
|
$subscription_id = $this->get_subscription_id();
|
|
}
|
|
|
|
$date = get_user_meta( $this->ID, 'rcp_renewed_date_' . $this->get_subscription_id(), true );
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
// If we don't have a customer, bail now.
|
|
if ( empty( $customer ) ) {
|
|
return apply_filters( 'rcp_get_renewed_date', $date, $this->ID, $subscription_id, $this );
|
|
}
|
|
|
|
// Get membership with this subscription ID.
|
|
$memberships = $customer->get_memberships( array(
|
|
'object_id' => $subscription_id
|
|
) );
|
|
|
|
// If no memberships found - bail.
|
|
if ( empty( $memberships ) || empty( $memberships[0] ) ) {
|
|
return apply_filters( 'rcp_get_renewed_date', $date, $this->ID, $subscription_id, $this );
|
|
}
|
|
|
|
/**
|
|
* @var RCP_Membership $membership
|
|
*/
|
|
$membership = $memberships[0];
|
|
$date = $membership->get_renewed_date( false );
|
|
|
|
return apply_filters( 'rcp_get_renewed_date', $date, $this->ID, $subscription_id, $this );
|
|
|
|
}
|
|
|
|
/**
|
|
* Renews a member's membership by updating status and expiration date
|
|
*
|
|
* Does NOT handle payment processing for the renewal. This should be called after receiving a renewal payment.
|
|
*
|
|
* @param bool $recurring Whether or not the membership is recurring.
|
|
* @param string $status Membership status.
|
|
* @param string $expiration Membership expiration date in MySQL format.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return void|false
|
|
*/
|
|
public function renew( $recurring = false, $status = 'active', $expiration = '' ) {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$membership->renew( $recurring, $status, $expiration );
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets a member's membership as cancelled by updating status
|
|
*
|
|
* Does NOT handle actual cancellation of subscription payments, that is done in rcp_process_member_cancellation(). This should be called after a member is successfully cancelled.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return void
|
|
*/
|
|
public function cancel() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$membership->cancel();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if the member can cancel their subscription on site
|
|
*
|
|
* @access public
|
|
* @since 2.7.2
|
|
* @return bool True if the member can cancel, false if not.
|
|
*/
|
|
public function can_cancel() {
|
|
|
|
$membership = $this->get_membership();
|
|
$can_cancel = false;
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$can_cancel = $membership->can_cancel();
|
|
} else {
|
|
$can_cancel = apply_filters( 'rcp_member_can_cancel', $can_cancel, $this->ID );
|
|
}
|
|
|
|
return $can_cancel;
|
|
|
|
}
|
|
|
|
/**
|
|
* Cancel the member's payment profile
|
|
*
|
|
* @param bool $set_status Whether or not to update the status to 'cancelled'.
|
|
*
|
|
* @access public
|
|
* @since 2.7.2
|
|
* @return bool Whether or not the cancellation was successful.
|
|
*/
|
|
public function cancel_payment_profile( $set_status = true ) {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( empty( $membership ) ) {
|
|
return false;
|
|
}
|
|
|
|
$success = $membership->cancel_payment_profile( $set_status );
|
|
|
|
if ( is_wp_error( $success ) ) {
|
|
return false;
|
|
}
|
|
|
|
return $success;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the profile ID of the member.
|
|
*
|
|
* This is used by payment gateways to store customer IDs and other identifiers for payment profiles
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return string
|
|
*/
|
|
public function get_payment_profile_id() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$profile_id = $membership->get_gateway_customer_id();
|
|
} else {
|
|
$profile_id = apply_filters( 'rcp_member_get_payment_profile_id', false, $this->ID, $this );
|
|
}
|
|
|
|
return $profile_id;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the payment profile ID for a member
|
|
*
|
|
* This is used by payment gateways to store customer IDs and other identifiers for payment profiles.
|
|
*
|
|
* @param string $profile_id Payment profile ID.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return void
|
|
*/
|
|
public function set_payment_profile_id( $profile_id = '' ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$membership->set_gateway_customer_id( $profile_id );
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription ID of the member from the merchant processor.
|
|
*
|
|
* This is used by payment gateways to retrieve the ID of the subscription.
|
|
*
|
|
* @access public
|
|
* @since 2.5
|
|
* @return string
|
|
*/
|
|
public function get_merchant_subscription_id() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$subscription_id = $membership->get_gateway_subscription_id();
|
|
} else {
|
|
$subscription_id = apply_filters( 'rcp_member_get_merchant_subscription_id', false, $this->ID, $this );
|
|
}
|
|
|
|
return $subscription_id;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the payment profile ID for a member
|
|
*
|
|
* This is used by payment gateways to store the ID of the subscription.
|
|
*
|
|
* @param string $subscription_id
|
|
*
|
|
* @access public
|
|
* @since 2.5
|
|
* @return void
|
|
*/
|
|
public function set_merchant_subscription_id( $subscription_id = '' ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$membership->set_gateway_subscription_id( $subscription_id );
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription ID of the member
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return int|false
|
|
*/
|
|
public function get_subscription_id() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$subscription_id = $membership->get_object_id();
|
|
} else {
|
|
$subscription_id = apply_filters( 'rcp_member_get_subscription_id', false, $this->ID, $this );
|
|
}
|
|
|
|
return $subscription_id;
|
|
|
|
}
|
|
|
|
/**
|
|
* Set member's subscription ID
|
|
*
|
|
* @param int $subscription_id ID of the subscription level to set.
|
|
*
|
|
* @access public
|
|
* @since 2.7.4
|
|
* @return void
|
|
*/
|
|
public function set_subscription_id( $subscription_id ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$membership->set_object_id( $subscription_id );
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the pending subscription ID of the member
|
|
*
|
|
* @access public
|
|
* @since 2.4.12
|
|
* @return int|false
|
|
*/
|
|
public function get_pending_subscription_id() {
|
|
|
|
/**
|
|
* @var RCP_Payments $rcp_payments_db
|
|
*/
|
|
global $rcp_payments_db;
|
|
|
|
$pending_level_id = get_user_meta( $this->ID, 'rcp_pending_subscription_level', true );
|
|
$pending_payment = $this->get_pending_payment_id();
|
|
|
|
if ( ! empty( $pending_payment ) ) {
|
|
$payment = $rcp_payments_db->get_payment( absint( $pending_payment ) );
|
|
$pending_level_id = $payment->object_id;
|
|
}
|
|
|
|
return $pending_level_id;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription key of the member
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return string
|
|
*/
|
|
public function get_subscription_key() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$subscription_key = $membership->get_subscription_key();
|
|
} else {
|
|
$subscription_key = apply_filters( 'rcp_member_get_subscription_key', false, $this->ID, $this );
|
|
}
|
|
|
|
return $subscription_key;
|
|
|
|
}
|
|
|
|
/**
|
|
* Set member's subscription key
|
|
*
|
|
* @param string $subscription_key Key to set. Automatically generated if omitted.
|
|
*
|
|
* @access public
|
|
* @since 2.7.4
|
|
* @return void
|
|
*/
|
|
public function set_subscription_key( $subscription_key = '' ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$this->membership->set_subscription_key( $subscription_key );
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the pending subscription key of the member
|
|
*
|
|
* @access public
|
|
* @since 2.4.12
|
|
* @return string
|
|
*/
|
|
public function get_pending_subscription_key() {
|
|
|
|
/**
|
|
* @var RCP_Payments $rcp_payments_db
|
|
*/
|
|
global $rcp_payments_db;
|
|
|
|
$pending_key = get_user_meta( $this->ID, 'rcp_pending_subscription_key', true );
|
|
$pending_payment = $this->get_pending_payment_id();
|
|
|
|
if ( ! empty( $pending_payment ) ) {
|
|
$payment = $rcp_payments_db->get_payment( absint( $pending_payment ) );
|
|
$pending_key = $payment->subscription_key;
|
|
}
|
|
|
|
return $pending_key;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the current subscription name of the member
|
|
*
|
|
* @uses rcp_get_subscription_name()
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return string
|
|
*/
|
|
public function get_subscription_name() {
|
|
|
|
$sub_name = rcp_get_subscription_name( $this->get_subscription_id() );
|
|
|
|
return apply_filters( 'rcp_member_get_subscription_name', $sub_name, $this->ID, $this );
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the pending subscription name of the member.
|
|
*
|
|
* @uses rcp_get_subscription_name()
|
|
*
|
|
* @access public
|
|
* @since 2.4.12
|
|
* @return string
|
|
*/
|
|
public function get_pending_subscription_name() {
|
|
|
|
$sub_name = rcp_get_subscription_name( $this->get_pending_subscription_id() );
|
|
|
|
return apply_filters( 'rcp_member_get_subscription_name', $sub_name, $this->ID, $this );
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves all payments belonging to the member
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return array|null Array of objects.
|
|
*/
|
|
public function get_payments() {
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
if ( ! empty( $customer ) ) {
|
|
return $customer->get_payments();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the ID number of the currently pending payment.
|
|
*
|
|
* @access public
|
|
* @since 2.9
|
|
* @return int|bool ID of the pending payment or false if none.
|
|
*/
|
|
public function get_pending_payment_id() {
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
if ( ! empty( $customer ) ) {
|
|
return $customer->get_pending_payment_id();
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Retrieves the notes on a member
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return string
|
|
*/
|
|
public function get_notes() {
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
if ( ! empty( $customer ) ) {
|
|
$notes = $customer->get_notes();
|
|
} else {
|
|
$notes = apply_filters( 'rcp_member_get_notes', false, $this->ID, $this );
|
|
}
|
|
|
|
return $notes;
|
|
|
|
}
|
|
|
|
/**
|
|
* Adds a new note to a member
|
|
*
|
|
* @param string $note Note to add to the member.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return true
|
|
*/
|
|
public function add_note( $note = '' ) {
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
if ( ! empty( $customer ) ) {
|
|
return $customer->add_note( $note );
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if a member has an active subscription, or is cancelled but has not reached EOT
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool
|
|
*/
|
|
public function is_active() {
|
|
|
|
$ret = false;
|
|
|
|
if( user_can( $this->ID, 'manage_options' ) ) {
|
|
$ret = true;
|
|
} else {
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$ret = $membership->is_active() && $membership->is_paid();
|
|
}
|
|
}
|
|
|
|
return apply_filters( 'rcp_is_active', $ret, $this->ID, $this );
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if a member has a recurring subscription
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool
|
|
*/
|
|
public function is_recurring() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
return $membership->is_recurring();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Sets whether a member is recurring
|
|
*
|
|
* @param bool $yes True if recurring, false if not.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return void
|
|
*/
|
|
public function set_recurring( $yes = true ) {
|
|
|
|
$membership = $this->get_membership( true );
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$membership->set_recurring( $yes );
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if the member is expired
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool
|
|
*/
|
|
public function is_expired() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$is_expired = $membership->is_expired();
|
|
} else {
|
|
$is_expired = apply_filters( 'rcp_member_is_expired', false, $this->ID, $this );
|
|
}
|
|
|
|
return $is_expired;
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if the member is currently trailing
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool
|
|
*/
|
|
public function is_trialing() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$ret = $membership->is_trialing();
|
|
} else {
|
|
$ret = false;
|
|
$ret = apply_filters( 'rcp_is_trialing', $ret, $this->ID );
|
|
$ret = apply_filters( 'rcp_member_is_trialing', $ret, $this->ID, $this );
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if the member has used a trial
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool
|
|
*/
|
|
public function has_trialed() {
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
if ( ! empty( $customer ) ) {
|
|
return $customer->has_trialed();
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if a member is pending email verification.
|
|
*
|
|
* @access public
|
|
* @return bool
|
|
*/
|
|
public function is_pending_verification() {
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
if ( ! empty( $customer ) ) {
|
|
$is_pending = $customer->is_pending_verification();
|
|
} else {
|
|
$is_pending = apply_filters( 'rcp_is_pending_email_verification', false, $this->ID, $this );
|
|
}
|
|
|
|
return (bool) $is_pending;
|
|
|
|
}
|
|
|
|
/**
|
|
* Confirm email verification
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function verify_email() {
|
|
|
|
$customer = $this->get_customer();
|
|
|
|
if ( ! empty( $customer ) ) {
|
|
$customer->verify_email();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if the member can access specified content
|
|
*
|
|
* @param int $post_id ID of the post to check the permissions on.
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return bool
|
|
*/
|
|
public function can_access( $post_id = 0 ) {
|
|
|
|
// Admins always get access.
|
|
if( user_can( $this->ID, 'manage_options' ) ) {
|
|
return apply_filters( 'rcp_member_can_access', true, $this->ID, $post_id, $this );
|
|
}
|
|
|
|
// If the post is unrestricted, everyone gets access.
|
|
if( ! rcp_is_restricted_content( $post_id ) ) {
|
|
return apply_filters( 'rcp_member_can_access', true, $this->ID, $post_id, $this );
|
|
}
|
|
|
|
/*
|
|
* From this point on we assume the post has some kind of restrictions added.
|
|
*/
|
|
|
|
$can_access = false;
|
|
$customer = $this->get_customer();
|
|
|
|
// If there's no customer, there's no membership, and thus they don't have access.
|
|
if ( empty( $customer ) ) {
|
|
return apply_filters( 'rcp_member_can_access', $can_access, $this->ID, $post_id, $this );
|
|
}
|
|
|
|
return $customer->can_access( $post_id );
|
|
|
|
}
|
|
|
|
/**
|
|
* Gets the URL to switch to the user
|
|
* if the User Switching plugin is active
|
|
*
|
|
* @access public
|
|
* @since 2.1
|
|
* @return string|false
|
|
*/
|
|
public function get_switch_to_url() {
|
|
|
|
if( ! class_exists( 'user_switching' ) ) {
|
|
return false;
|
|
}
|
|
|
|
$link = user_switching::maybe_switch_url( $this );
|
|
if ( $link ) {
|
|
$link = add_query_arg( 'redirect_to', urlencode( home_url() ), $link );
|
|
return $link;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the prorate credit amount for the user's remaining subscription
|
|
*
|
|
* @since 2.5
|
|
* @return int|float
|
|
*/
|
|
public function get_prorate_credit_amount() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( empty( $membership ) ) {
|
|
return 0;
|
|
}
|
|
|
|
return $membership->get_prorate_credit_amount();
|
|
|
|
}
|
|
|
|
/**
|
|
* Get details about the member's card on file
|
|
*
|
|
* @since 2.5
|
|
* @return array
|
|
*/
|
|
public function get_card_details() {
|
|
|
|
$membership = $this->get_membership();
|
|
|
|
if ( ! empty( $membership ) ) {
|
|
$card_details = $membership->get_card_details();
|
|
} else {
|
|
$card_details = apply_filters( 'rcp_get_card_details', array(), $this->ID, $this );
|
|
}
|
|
|
|
return $card_details;
|
|
|
|
}
|
|
|
|
/**
|
|
* Determines if the customer just upgraded
|
|
*
|
|
* @since 2.5
|
|
* @return int|false - Timestamp reflecting the date/time of the latest upgrade, or false.
|
|
*/
|
|
public function just_upgraded() {
|
|
|
|
$upgraded = get_user_meta( $this->ID, '_rcp_just_upgraded', true );
|
|
|
|
if( ! empty( $upgraded ) ) {
|
|
|
|
$limit = strtotime( '-5 minutes', current_time( 'timestamp' ) );
|
|
|
|
if( $limit > $upgraded ) {
|
|
|
|
$upgraded = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return apply_filters( 'rcp_member_just_upgraded', $upgraded, $this->ID, $this );
|
|
}
|
|
|
|
} |