get_var( $wpdb->prepare( "SELECT id FROM $wpdb->pmpro_discount_codes WHERE code = %s LIMIT 1", $discount_code ) );
}
else
{
$discount_code = "";
$discount_code_id = "";
}
if ( ! empty( $_REQUEST['pmpro_level'] ) ) {
$level_str = sanitize_text_field( $_REQUEST['pmpro_level'] );
$level_str = str_replace( ' ', '+', $level_str ); // If val passed via URL, + would be converted to space.
$level_ids = array_map( 'intval', explode( '+', $level_str ) );
} else {
$level_ids = null;
}
if(!empty($_REQUEST['msgfield']))
$msgfield = preg_replace("/[^A-Za-z0-9\_\-]/", "", sanitize_text_field( $_REQUEST['msgfield'] ) );
else
$msgfield = NULL;
//check that the code is valid
$codecheck = pmpro_checkDiscountCode($discount_code, $level_ids, true);
if( $codecheck[0] == false ) {
//uh oh. show code error
echo esc_html( $codecheck[1] );
?>
pmpro_discount_codes_levels cl
LEFT JOIN $wpdb->pmpro_membership_levels l
ON cl.level_id = l.id
LEFT JOIN $wpdb->pmpro_discount_codes dc
ON dc.id = cl.code_id WHERE dc.code = '" . esc_sql( $discount_code ) . "'
AND cl.level_id IN (" . implode( ',', array_map( 'intval', $level_ids ) ) . ")";
$code_levels = $wpdb->get_results($sqlQuery);
// ... and then get prices for the remaining levels.
$levels_found = array();
foreach( $code_levels as $code_level ) {
$levels_found[] = intval( $code_level->level_id );
}
if ( ! empty( array_diff( $level_ids, $levels_found ) ) ) {
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels WHERE id IN (" . implode( ',', array_map( 'intval', array_diff( $level_ids, $levels_found ) ) ) . ")";
$code_levels = array_merge( $code_levels, $wpdb->get_results($sqlQuery) );
}
//filter adjustments to the level
if ( count( $code_levels ) <= 1 ) {
// Should return just a single level object or null.
$code_levels = array( apply_filters("pmpro_discount_code_level", empty( $code_levels ) ? null : $code_levels[0], $discount_code_id) );
} else {
// Should return an array of levels objects.
$code_levels = apply_filters("pmpro_discount_code_level", $code_levels, $discount_code_id);
}
printf( esc_html__( 'The %s code has been applied to your order.', 'paid-memberships-pro' ), '' . esc_html( $discount_code ) . '' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
$combined_level = null;
foreach ( $code_levels as $code_level ) {
if ( empty( $combined_level ) ) {
$combined_level = clone $code_level;
} else {
$combined_level->initial_payment = $combined_level->initial_payment + $code_level->initial_payment;
$combined_level->billing_amount = $combined_level->billing_amount + $code_level->billing_amount;
}
}
?>