Files
roi-theme/wp-content/plugins/restrict-content-pro/core/includes/ajax-actions.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- 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>
2025-11-03 21:04:30 -06:00

256 lines
9.1 KiB
PHP

<?php
/**
* Ajax Actions
*
* Process the front-end ajax actions.
*
* @package Restrict Content Pro
* @copyright Copyright (c) 2017, Restrict Content Pro
* @license http://opensource.org/license/gpl-2.1.php GNU Public License
*/
/**
* Check whether a discount code is valid. Used during registration to validate a discount code on the fly.
*
* @return void
*/
function rcp_validate_discount_with_ajax() {
if( isset( $_POST['code'] ) ) {
$return = array();
$return['valid'] = false;
$return['full'] = false;
$subscription_id = isset( $_POST['subscription_id'] ) ? absint( $_POST['subscription_id'] ) : 0;
rcp_setup_registration( $subscription_id, $_POST['code'] );
if( rcp_validate_discount( wp_unslash( $_POST['code'] ), $subscription_id ) ) {
$code_details = rcp_get_discount_details_by_code( sanitize_text_field( wp_unslash( $_POST['code'] ) ) );
if( ( ! rcp_registration_is_recurring() && rcp_get_registration()->get_recurring_total() == 0.00 ) && rcp_get_registration()->get_total() == 0.00 ) {
// this is a 100% discount
$return['full'] = true;
}
$return['valid'] = true;
$return['amount'] = rcp_discount_sign_filter( $code_details->get_amount(), $code_details->get_unit() );
}
wp_send_json( $return );
}
die();
}
add_action( 'wp_ajax_validate_discount', 'rcp_validate_discount_with_ajax' );
add_action( 'wp_ajax_nopriv_validate_discount', 'rcp_validate_discount_with_ajax' );
/**
* Calls the load_fields() method for gateways when a gateway selection is made
*
* @since 2.1
* @return void
*/
function rcp_load_gateway_fields() {
$gateways = new RCP_Payment_Gateways;
$gateways->load_fields();
die();
}
add_action( 'wp_ajax_rcp_load_gateway_fields', 'rcp_load_gateway_fields' );
add_action( 'wp_ajax_nopriv_rcp_load_gateway_fields', 'rcp_load_gateway_fields' );
/**
* Setup the registration details
*
* @since 2.5
* @return void
*/
function rcp_calc_total_ajax() {
$return = array(
'valid' => false,
'total' => __( 'No available membership levels for your account.', 'rcp' ),
);
if ( ! rcp_is_registration() ) {
wp_send_json( $return );
}
ob_start();
rcp_get_template_part( 'register-total-details' );
$return['total'] = ob_get_clean();
wp_send_json( $return );
}
add_action( 'wp_ajax_rcp_calc_discount', 'rcp_calc_total_ajax' );
add_action( 'wp_ajax_nopriv_rcp_calc_discount', 'rcp_calc_total_ajax' );
/**
* Validates the entire registration state
*
* @param array $args
*
* @since 3.0.6
* @return array|bool
*/
function rcp_validate_registration_state( $args = array() ) {
if( empty( $args ) ) {
return false;
}
/**
* @type int $level_id - ID of the membership level.
* @type string $gateway - Payment gateway slug.
* @type string $gateway_fields - HTML for the payment gateway fields.
* @type bool $show_gateway_fields - Whether or not the gateway fields should be displayed.
* @type string $discount_code - Discount code to apply to the registration.
* @type bool $discount_valid - Whether or not the discount is valid.
* @type float $discount_amount - The dollar amount discounted.
* @type bool $full_discount - Whether or not this is a paid level that has been discounted down to $0 due to discount code, negative fees, or credits.
* @type bool $is_free - Similar to $full_discount, but just for discount codes. Deprecated.
* @type bool $lifetime - Whether or not this is a lifetime membership. Deprecated.
* @type bool $level_has_trial - Whether or not the chosen membership level has a trial.
* @type float $initial_total - Total amount due today.
* @type float $recurring_total - Total recurring amount.
* @type bool $recurring - Whether or not recurring is checked on.
* @type bool $recurring_available - Whether or not the recurring checkbox should even be displayed.
* @type string $total_details_html - The HTML for the total details table.
* @type string $event_type - JavaScript event type.
*/
$return = array(
'level_id' => ! empty( $args['rcp_level'] ) ? absint( $args['rcp_level'] ) : 0,
'gateway' => ! empty( $args['rcp_gateway'] ) ? sanitize_text_field( $args['rcp_gateway'] ) : false,
'gateway_fields' => false,
'show_gateway_fields' => true,
'discount_code' => ! empty( $args['discount_code'] ) ? sanitize_text_field( $args['discount_code'] ) : false,
'discount_valid' => false,
'discount_amount' => false,
'full_discount' => false,
'is_free' => ! empty( $args['is_free'] ) && 'true' == $args['is_free'], // Deprecated
'lifetime' => ! empty( $args['lifetime'] ) && 'true' == $args['lifetime'], // Deprecated
'level_has_trial' => ! empty( $args['level_has_trial'] ) && 'true' == $args['level_has_trial'],
'trial_eligible' => true,
'initial_total' => 0.00,
'recurring_total' => 0.00,
'recurring' => ! empty( $args['rcp_auto_renew'] ) && 'true' == $args['rcp_auto_renew'],
'recurring_available' => false,
'total_details_html' => __( 'No available membership levels for your account.', 'rcp' ),
'event_type' => ! empty( $args['event_type'] ) ? sanitize_text_field( $args['event_type'] ) : false
);
rcp_setup_registration( $return['level_id'], $return['discount_code'] );
/**
* 100% discount
* If auto renew is DISABLED, this checks if the total due today is $0.
* If auto renew is ENABLED, this checks if the total today and recurring total are both $0.
* This may be $0 due to discounts, fees, or credits.
*/
if ( ( ! rcp_registration_is_recurring() && rcp_get_registration()->get_total() == 0.00 )
|| ( rcp_registration_is_recurring() && ( rcp_get_registration()->get_total() + rcp_get_registration()->get_recurring_total() ) == 0.00 )
) {
// this is a 100% discount
$return['full_discount'] = true;
}
/** Discount */
if( ! empty( $return['discount_code'] ) ) {
if( rcp_validate_discount( $return['discount_code'], $return['level_id'] ) ) {
$code_details = rcp_get_discount_details_by_code( $return['discount_code'] );
$return['discount_valid'] = true;
$return['discount_amount'] = rcp_discount_sign_filter( $code_details->get_amount(), $code_details->get_unit() );
}
}
/** Totals */
if ( rcp_is_registration() ) {
$return['initial_total'] = rcp_get_registration()->get_total();
$return['recurring_total'] = rcp_get_registration()->get_recurring_total();
$return['recurring'] = rcp_registration_is_recurring();
ob_start();
rcp_get_template_part( 'register-total-details' );
$return['total_details_html'] = ob_get_clean();
}
/**
* Recurring
* Determine whether or not it's allowed. This is largely a copy of rcp_registration_is_recurring()
* except it doesn't take the user's selection into account. It's just whether or not the checkbox should
* be displayed to the user at all.
*/
// Only proceed if "never auto renew" is NOT selected in settings.
if ( '2' != rcp_get_auto_renew_behavior() ) {
$return['recurring_available'] = true; // default to allowed
// Does the gateway actually support it?
$return['recurring_available'] = rcp_gateway_supports( $return['gateway'], 'recurring' );
// No auto renew for lifetime or free memberships.
if ( ! rcp_get_registration_recurring_total() > 0 ) {
$return['recurring_available'] = false;
}
// If the total today is $0 and the gateway does not support free trials, disable auto renew.
if ( empty( $return['initial_total'] ) && ! rcp_gateway_supports( $return['gateway'], 'trial' ) ) {
$return['recurring_available'] = false;
$return['recurring'] = false;
}
}
/**
* Free trial
* Force auto renew on and disable option if this is a free trial.
*/
$customer = rcp_get_customer(); // current customer
if ( $customer && $customer->has_trialed() ) {
$return['trial_eligible'] = false;
}
if ( $return['level_has_trial'] && $return['trial_eligible'] ) {
$return['recurring'] = rcp_gateway_supports( $return['gateway'], 'trial' );
}
/** Gateway fields */
// Load the fields.
if( ! empty( $return['gateway'] ) ) {
$gateways = new RCP_Payment_Gateways;
$fields = $gateways->get_gateway_fields( $return['gateway'] );
if( ! empty( $fields ) ) {
$return['gateway_fields'] = $fields;
}
}
// Determine whether or not the template should display the fields.
if ( ( empty( $return['initial_total'] ) && ! $return['recurring'] ) || ( empty( $return['initial_total'] ) && empty( $return['recurring_total'] ) ) ) {
// Membership is free.
$return['show_gateway_fields'] = false;
}
return $return;
}
/**
* Ajax callback for validating the registration state.
* @uses rcp_validate_registration_state()
*
* @since 3.0.6
* @return void
*/
function rcp_validate_registration_state_ajax() {
wp_send_json_success( rcp_validate_registration_state( wp_unslash( $_POST ) ) );
exit;
}
add_action( 'wp_ajax_rcp_validate_registration_state', 'rcp_validate_registration_state_ajax' );
add_action( 'wp_ajax_nopriv_rcp_validate_registration_state', 'rcp_validate_registration_state_ajax' );
add_action( 'wp_ajax_rcp_braintree_3ds_validation_fields', 'rcp_braintree_3ds_validation_fields' );
add_action( 'wp_ajax_nopriv_rcp_braintree_3ds_validation_fields', 'rcp_braintree_3ds_validation_fields' );