Files
roi-theme/wp-content/plugins/advanced-ads-pro/modules/paid-memberships-pro/main.class.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

265 lines
9.4 KiB
PHP
Executable File

<?php // phpcs:ignoreFile
use AdvancedAds\Abstracts\Ad;
/**
* Display and Visitor Condition for PaidMembershipsPro plugin
*
* PMP version checked: 1.8.13.6
*/
class Advanced_Ads_Pro_Module_PaidMembershipsPro {
/**
* Condition options
*
* @var array
*/
protected $options = [];
/**
* Constructor
*/
public function __construct() {
add_filter( 'advanced-ads-display-conditions', [ $this, 'display_conditions' ] );
add_filter( 'advanced-ads-visitor-conditions', [ $this, 'visitor_conditions' ] );
}
/**
* Add PMP display condition
*
* @param array $conditions Display conditions.
*
* @return array $conditions new global display conditions
*/
public function display_conditions( $conditions ) {
if ( defined( 'PMPRO_VERSION' ) ) {
$conditions['pmp_membership_level'] = [
'label' => __( 'PMP page level', 'advanced-ads-pro' ),
'description' => __( 'Display ads only on pages that require a specific membership level set of PaidMembershipsPro.', 'advanced-ads-pro' ),
'metabox' => [ 'Advanced_Ads_Pro_Module_PaidMembershipsPro', 'metabox_pmp_membership_level_display_condition' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_PaidMembershipsPro', 'check_pmp_membership_level_display_condition' ] // callback for frontend check
];
}
return $conditions;
}
/**
* Check if ad can be displayed by PMP membership level condition in frontend.
*
* @param array $options Options of the condition.
* @param Ad $ad Ad instance.
*
* @return bool
*/
public static function check_pmp_membership_level_display_condition( $options, Ad $ad ) {
global $wpdb;
if ( ! isset( $options['value'] ) || ! is_array( $options['value'] ) ) {
return false;
}
if ( isset( $options['operator'] ) && 'is_not' === $options['operator'] ) {
$operator = 'is_not';
} else {
$operator = 'is';
}
$ad_options = $ad->get_data();
$post_id = $ad_options['post']['id'] ?? null;
if ( $post_id && defined( 'PMPRO_VERSION' ) ) {
$page_levels = $wpdb->get_col( "SELECT membership_id FROM {$wpdb->pmpro_memberships_pages} WHERE page_id = '{$post_id}'" );
if ( is_array( $page_levels ) ) {
switch ( $operator ) {
case 'is_not':
return ! count( array_intersect( $options['value'], $page_levels ) );
break;
default:
return count( array_intersect( $options['value'], $page_levels ) );
}
}
}
return true;
}
/**
* Callback to display the PMP membership level condition
*
* @since 1.14
*
* @param array $options Options of the condition.
* @param int $index Index of the condition.
*/
public static function metabox_pmp_membership_level_display_condition( $options, $index = 0, $form_name = '' ) {
global $wpdb;
if ( ! isset ( $options['type'] ) || '' === $options['type'] ) {
return;
}
$type_options = Advanced_Ads_Display_Conditions::get_instance()->conditions;
if ( ! isset( $type_options[ $options['type'] ] ) ) {
return;
}
$name = Advanced_Ads_Display_Conditions::get_form_name_with_index( $form_name, $index );
$values = ( isset($options['value']) && is_array($options['value']) ) ? $options['value'] : [];
$operator = ( isset($options['operator']) && $options['operator'] === 'is_not' ) ? 'is_not' : 'is';
?><input type="hidden" name="<?php echo $name; ?>[type]" value="<?php echo $options['type']; ?>"/>
<select name="<?php echo $name; ?>[operator]">
<option value="is" <?php selected('is', $operator); ?>><?php _e('is', 'advanced-ads-pro'); ?></option>
<option value="is_not" <?php selected('is_not', $operator); ?>><?php _e('is not', 'advanced-ads-pro'); ?></option>
</select><?php
// get all levels
$levels = $wpdb->get_results( "SELECT * FROM {$wpdb->pmpro_membership_levels}", OBJECT );
?><div class="advads-conditions-single advads-buttonset"><?php
$rand = md5( $form_name );
if ( is_array( $levels ) && count( $levels ) ) {
foreach( $levels as $_level ) {
$value = ( $values === [] || in_array($_level->id, $values) ) ? 1 : 0;
$field_id = 'advads-visitor-conditions-' . sanitize_title( $_level->id ) . $rand;
?><label class="button ui-button" for="<?php echo $field_id;
?>"><?php echo $_level->name; ?></label><input type="checkbox" id="<?php echo $field_id; ?>" name="<?php echo $name; ?>[value][]" <?php checked($value, 1); ?> value="<?php echo $_level->id; ?>"><?php
}
} else {
_e( 'No membership levels set up yet.', 'advanced-ads-pro' );
}
?></div>
<p class="description">
<?php echo esc_html( $type_options[ $options['type'] ]['description'] ); ?>
<a href="https://wpadvancedads.com/paid-memberships-pro/?utm_source=advanced-ads&utm_medium=link?utm_campaign=condition-pmp-page-level" class="advads-manual-link" target="_blank">
<?php esc_html_e( 'Manual', 'advanced-ads-pro' ); ?>
</a>
</p><?php
}
/**
* add PMP visitor condition
*
* @param array $conditions visitor conditions
* @return array $conditions new global visitor conditions
*/
public function visitor_conditions( $conditions ) {
if ( defined( 'PMPRO_VERSION' ) ) {
// language set with the WPML plugin
$conditions['pmp_user_level'] = [
'label' => __( 'PMP user level', 'advanced-ads-pro' ),
'description' => __( 'Display ads only to users with a specific membership level set with PaidMembershipsPro.', 'advanced-ads-pro' ),
'metabox' => [ 'Advanced_Ads_Pro_Module_PaidMembershipsPro', 'metabox_pmp_membership_level_visitor_condition' ], // callback to generate the metabox
'check' => [ 'Advanced_Ads_Pro_Module_PaidMembershipsPro', 'check_pmp_membership_level_visitor_condition' ] // callback for frontend check
];
}
return $conditions;
}
/**
* Check if ad can be displayed by PMP membership level visitor condition in frontend.
*
* @param array $options Options of the condition.
* @param Ad $ad The ad object.
*
* @return bool
*/
public static function check_pmp_membership_level_visitor_condition( $options, Ad $ad ) {
if (!isset($options['value']) || ! is_array($options['value'])) {
return false;
}
if (isset($options['operator']) && $options['operator'] === 'is_not') {
$operator = 'is_not';
} else {
$operator = 'is';
}
if ( defined( 'PMPRO_VERSION' ) && function_exists( 'pmpro_getMembershipLevelForUser' ) ) {
// get membership level of current user
$current_user = wp_get_current_user();
$membership_level = pmpro_getMembershipLevelForUser( $current_user->ID );
if ( isset( $membership_level->ID ) ) {
switch ( $operator ) {
case 'is_not' :
return ! in_array( $membership_level->ID, $options['value'] );
break;
default :
return in_array( $membership_level->ID, $options['value'] );
}
} elseif ( ! isset( $membership_level->ID ) && count( $options['value'] ) ) { // return false, if ad needs a membership level, but user has none
return $operator === 'is_not';
}
}
return true;
}
/**
* callback to display the PMP membership level visitor condition
*
* @since 1.14
* @param array $options options of the condition
* @param int $index index of the condition
*/
static function metabox_pmp_membership_level_visitor_condition( $options, $index = 0, $form_name = '' ) {
global $wpdb;
if ( ! isset ( $options['type'] ) || '' === $options['type'] ) { return; }
$type_options = Advanced_Ads_Visitor_Conditions::get_instance()->conditions;
if (!isset($type_options[$options['type']])) {
return;
}
// form name basis
$name = Advanced_Ads_Pro_Module_Advanced_Visitor_Conditions::get_form_name_with_index( $form_name, $index );
// options
$values = ( isset($options['value']) && is_array($options['value']) ) ? $options['value'] : [];
$operator = ( isset($options['operator']) && $options['operator'] === 'is_not' ) ? 'is_not' : 'is';
// get values and select operator based on previous settings
?><input type="hidden" name="<?php echo $name; ?>[type]" value="<?php echo $options['type']; ?>"/>
<select name="<?php echo $name; ?>[operator]">
<option value="is" <?php selected('is', $operator); ?>><?php _e('is', 'advanced-ads-pro'); ?></option>
<option value="is_not" <?php selected('is_not', $operator); ?>><?php _e('is not', 'advanced-ads-pro'); ?></option>
</select><?php
// get all levels
$levels = $wpdb->get_results( "SELECT * FROM {$wpdb->pmpro_membership_levels}", OBJECT );
$rand = md5( $form_name );
?><div class="advads-conditions-single advads-buttonset"><?php
if ( is_array( $levels ) && count( $levels ) ) {
foreach( $levels as $_level ) {
$value = ( $values === [] || in_array($_level->id, $values) ) ? 1 : 0;
$field_id = 'advads-visitor-conditions-' . sanitize_title( $_level->id ) . $rand;
?><label class="button ui-button" for="<?php echo $field_id
?>"><?php echo $_level->name; ?></label><input type="checkbox" id="<?php echo $field_id; ?>" name="<?php echo $name; ?>[value][]" <?php checked($value, 1); ?> value="<?php echo $_level->id; ?>"><?php
}
} else {
_e( 'No membership levels set up yet.', 'advanced-ads-pro' );
}
?></div>
<p class="description">
<?php echo esc_html( $type_options[ $options['type'] ]['description'] ); ?>
<a href="https://wpadvancedads.com/paid-memberships-pro/?utm_source=advanced-ads&utm_medium=link&utm_campaign=condition-PMP-user-level" class="advads-manual-link" target="_blank">
<?php esc_html_e( 'Manual', 'advanced-ads-pro' ); ?>
</a>
</p>
<?php
}
}