Plugin Directory

Changeset 3159730


Ignore:
Timestamp:
09/30/2024 10:10:01 AM (18 months ago)
Author:
andrewza
Message:

Updated 1.5.3

Location:
pmpro-payfast
Files:
8 edited
1 copied

Legend:

Unmodified
Added
Removed
  • pmpro-payfast/tags/1.5.3/classes/class.pmprogateway_payfast.php

    r3121260 r3159730  
    4343        add_filter( 'pmpro_required_billing_fields', array( 'PMProGateway_PayFast', 'pmpro_required_billing_fields' ) );
    4444        add_filter( 'pmpro_checkout_before_submit_button', array( 'PMProGateway_PayFast', 'pmpro_checkout_before_submit_button' ) );
    45         add_filter( 'pmpro_checkout_before_change_membership_level', array( 'PMProGateway_PayFast', 'pmpro_checkout_before_change_membership_level' ), 10, 2 );
    4645
    4746        // itn handler
     
    4948        add_action( 'wp_ajax_pmpro_payfast_itn_handler', array( 'PMProGateway_PayFast', 'wp_ajax_pmpro_payfast_itn_handler' ) );
    5049
    51         add_filter( 'pmpro_gateways_with_pending_status', array( 'PMProGateway_PayFast', 'pmpro_gateways_with_pending_status' ) );
    52     }
    53 
    54 
    55     /**
    56      * Add PayFast to the list of allowed gateways.
    57      *
    58      * @return array
    59      */
    60     static function pmpro_gateways_with_pending_status( $gateways ) {
    61         $gateways[] = 'payfast';
    62 
    63         return $gateways;
    6450    }
    6551
     
    295281    }
    296282
    297     /**
    298      * Instead of change membership levels, send users to PayFast to pay.
    299      *
    300      * @since 1.8
    301      */
    302     static function pmpro_checkout_before_change_membership_level( $user_id, $morder ) {
    303         global $discount_code_id, $wpdb;
    304 
    305         // if no order, no need to pay
    306         if ( empty( $morder ) ) {
    307             return;
    308         }
    309 
    310         // bail if the current gateway is not set to PayFast.
    311         if ( 'payfast' != $morder->gateway ) {
    312             return;
    313         }
    314 
    315         $morder->user_id = $user_id;
    316         $morder->saveOrder();
    317 
    318         // if global is empty by query is available.
    319         if ( empty( $discount_code_id ) && isset( $_REQUEST['discount_code'] ) ) {
    320             $discount_code_id = $wpdb->get_var( "SELECT id FROM $wpdb->pmpro_discount_codes WHERE code = '" . esc_sql( sanitize_text_field( $_REQUEST['discount_code'] ) ) . "'" );
    321         }
    322 
    323         // save discount code use
    324         if ( ! empty( $discount_code_id ) ) {
    325             $wpdb->query(
    326                 $wpdb->prepare(
    327                     "INSERT INTO $wpdb->pmpro_discount_codes_uses
    328                     (code_id, user_id, order_id, timestamp)
    329                     VALUES( %d , %d, %d, %s )",
    330                     $discount_code_id,
    331                     $user_id,
    332                     $morder->id,
    333                     current_time( 'mysql' )
    334                 )
    335             );
    336         }
    337 
    338         do_action( 'pmpro_before_send_to_payfast', $user_id, $morder );
    339 
    340         $morder->Gateway->sendToPayFast( $morder );
    341     }
    342283
    343284    /**
     
    361302        $order->CardType     = '';
    362303        $order->cardtype     = '';
    363        
    364         $order->status = "review";
     304        $order->status = 'token';
    365305        $order->saveOrder();
    366306
    367         return true;
     307        pmpro_save_checkout_data_to_order( $order );
     308
     309        do_action( 'pmpro_before_send_to_payfast', $order->user_id, $order );
     310
     311        $this->sendToPayFast( $order );
    368312    }
    369313
  • pmpro-payfast/tags/1.5.3/pmpro-payfast.php

    r3121260 r3159730  
    44Plugin URI: https://www.paidmembershipspro.com/add-ons/payfast-payment-gateway/
    55Description: Adds PayFast as a gateway option for Paid Memberships Pro.
    6 Version: 1.5.2
     6Version: 1.5.3
    77Author: Paid Memberships Pro
    88Author URI: https://www.paidmembershipspro.com
  • pmpro-payfast/tags/1.5.3/readme.txt

    r3121261 r3159730  
    44Requires at least: 5.0
    55Tested up to: 6.6
    6 Stable tag: 1.5.2
     6Stable tag: 1.5.3
    77License: GPLv2
    88License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    5353
    5454== Changelog ==
     55= 1.5.3 - 2024-09-30 =
     56* BUG FIX/ENHANCEMENT: Added better support for User Fields not saving correctly during checkout. (@andrewlimaza)
     57* REFACTOR: Refactored the `pmpro_itnChangeMembershipLevel` function (@andrewlimaza)
     58
    5559= 1.5.2 - 2024-07-18 =
    5660* ENHANCEMENT: Added improved support for Paid Memberships Pro V3.1+ (@andrewlimaza)
  • pmpro-payfast/tags/1.5.3/services/payfast_itn_handler.php

    r3017774 r3159730  
    324324}
    325325
    326 /*
    327     Change the membership level. We also update the membership order to include filtered valus.
    328 */
     326/**
     327 * Change the membership level. We also update the membership order to include filtered values.
     328 * NOTE: Some legacy code has stayed within this function to ensure backwards compatibility.
     329 *
     330 */
    329331function pmpro_itnChangeMembershipLevel( $txn_id, &$morder ) {
    330     global $wpdb;
    331     // filter for level
    332     $morder->membership_level = apply_filters( 'pmpro_payfast_itnhandler_level', $morder->membership_level, $morder->user_id );
    333     // fix expiration date
    334     if ( ! empty( $morder->membership_level->expiration_number ) ) {
    335         $enddate = "'" . date( 'Y-m-d', strtotime( '+ ' . $morder->membership_level->expiration_number . ' ' . $morder->membership_level->expiration_period ) ) . "'";
    336     } else {
    337         $enddate = 'NULL';
    338     }
    339     // get discount code     (NOTE: but discount_code isn't set here. How to handle discount codes for PayPal Standard?)
    340     $morder->getDiscountCode();
    341     if ( ! empty( $morder->discount_code ) ) {
    342         // update membership level
    343         $morder->getMembershipLevel( true );
    344         $discount_code_id = $morder->discount_code->id;
    345     } else {
    346         $discount_code_id = '';
    347     }
    348     // set the start date to current_time('timestamp') but allow filters
    349     $startdate = apply_filters( 'pmpro_checkout_start_date', "'" . current_time( 'mysql' ) . "'", $morder->user_id, $morder->membership_level );
    350     // custom level to change user to
    351     $custom_level = array(
    352         'user_id' => $morder->user_id,
    353         'membership_id' => $morder->membership_level->id,
    354         'code_id' => $discount_code_id,
    355         'initial_payment' => $morder->membership_level->initial_payment,
    356         'billing_amount' => $morder->membership_level->billing_amount,
    357         'cycle_number' => $morder->membership_level->cycle_number,
    358         'cycle_period' => $morder->membership_level->cycle_period,
    359         'billing_limit' => $morder->membership_level->billing_limit,
    360         'trial_amount' => $morder->membership_level->trial_amount,
    361         'trial_limit' => $morder->membership_level->trial_limit,
    362         'startdate' => $startdate,
    363         'enddate' => $enddate,
    364     );
    365     global $pmpro_error;
    366     if ( ! empty( $pmpro_error ) ) {
    367         echo $pmpro_error;
    368         pmpro_payfast_itnlog( $pmpro_error );
    369     }
    370     // change level and continue "checkout"
    371     if ( pmpro_changeMembershipLevel( $custom_level, $morder->user_id ) !== false ) {
    372         // update order status and transaction ids
    373         $morder->status = 'success';
    374         $morder->payment_transaction_id = $txn_id;
    375         if ( ! empty( $_POST['token'] ) ) {
    376             $morder->subscription_transaction_id = sanitize_text_field( $_POST['m_payment_id'] );
    377         } else {
    378             $morder->subscription_transaction_id = '';
    379         }
    380         $morder->saveOrder();
    381         // add discount code use
    382         if ( ! empty( $discount_code ) && ! empty( $use_discount_code ) ) {
    383             $wpdb->query(
    384                 $wpdb->prepare(
    385                     "INSERT INTO $wpdb->pmpro_discount_codes_uses
    386                     (code_id, user_id, order_id, timestamp)
    387                     VALUES( %d, %d, %d, %s )",
    388                     $discount_code_id,
    389                     $morder->user_id,
    390                     $morder->id,
    391                     current_time( 'mysql' )
    392                 )
    393             );
    394         }
    395         // save first and last name fields
    396         if ( ! empty( $_POST['first_name'] ) ) {
    397             $old_firstname = get_user_meta( $morder->user_id, 'first_name', true );
    398             if ( ! empty( $old_firstname ) ) {
    399                 update_user_meta( $morder->user_id, 'first_name', sanitize_text_field( $_POST['first_name'] ) );
    400             }
    401         }
    402         if ( ! empty( $_POST['last_name'] ) ) {
    403             $old_lastname = get_user_meta( $morder->user_id, 'last_name', true );
    404             if ( ! empty( $old_lastname ) ) {
    405                 update_user_meta( $morder->user_id, 'last_name', sanitize_text_field( $_POST['last_name'] ) );
    406             }
    407         }
    408         // hook
    409         do_action( 'pmpro_after_checkout', $morder->user_id, $morder );
    410         // setup some values for the emails
    411         if ( ! empty( $morder ) ) {
    412             $invoice = new MemberOrder( $morder->id );
    413         } else {
    414             $invoice = null;
    415         }
    416         $user = get_userdata( $morder->user_id );
    417         $user->membership_level = $morder->membership_level;        // make sure they have the right level info
    418         // send email to member
    419         $pmproemail = new PMProEmail();
    420         $pmproemail->sendCheckoutEmail( $user, $invoice );
    421         // send email to admin
    422         $pmproemail = new PMProEmail();
    423         $pmproemail->sendCheckoutAdminEmail( $user, $invoice );
    424 
    425         return true;
    426     } else {
    427         return false;
    428     }
     332
     333    // update order status and transaction ids
     334    $morder->payment_transaction_id = $txn_id;
     335
     336    if ( ! empty( $_POST['token'] ) ) {
     337        $morder->subscription_transaction_id = sanitize_text_field( $_POST['m_payment_id'] );
     338    } else {
     339        $morder->subscription_transaction_id = '';
     340    }
     341    $morder->saveOrder(); // Temporarily save the order before processing it.
     342
     343    // Change level and complete the order.
     344    pmpro_pull_checkout_data_from_order( $morder );
     345    return pmpro_complete_async_checkout( $morder );
     346   
    429347}
    430348
  • pmpro-payfast/trunk/classes/class.pmprogateway_payfast.php

    r3121260 r3159730  
    4343        add_filter( 'pmpro_required_billing_fields', array( 'PMProGateway_PayFast', 'pmpro_required_billing_fields' ) );
    4444        add_filter( 'pmpro_checkout_before_submit_button', array( 'PMProGateway_PayFast', 'pmpro_checkout_before_submit_button' ) );
    45         add_filter( 'pmpro_checkout_before_change_membership_level', array( 'PMProGateway_PayFast', 'pmpro_checkout_before_change_membership_level' ), 10, 2 );
    4645
    4746        // itn handler
     
    4948        add_action( 'wp_ajax_pmpro_payfast_itn_handler', array( 'PMProGateway_PayFast', 'wp_ajax_pmpro_payfast_itn_handler' ) );
    5049
    51         add_filter( 'pmpro_gateways_with_pending_status', array( 'PMProGateway_PayFast', 'pmpro_gateways_with_pending_status' ) );
    52     }
    53 
    54 
    55     /**
    56      * Add PayFast to the list of allowed gateways.
    57      *
    58      * @return array
    59      */
    60     static function pmpro_gateways_with_pending_status( $gateways ) {
    61         $gateways[] = 'payfast';
    62 
    63         return $gateways;
    6450    }
    6551
     
    295281    }
    296282
    297     /**
    298      * Instead of change membership levels, send users to PayFast to pay.
    299      *
    300      * @since 1.8
    301      */
    302     static function pmpro_checkout_before_change_membership_level( $user_id, $morder ) {
    303         global $discount_code_id, $wpdb;
    304 
    305         // if no order, no need to pay
    306         if ( empty( $morder ) ) {
    307             return;
    308         }
    309 
    310         // bail if the current gateway is not set to PayFast.
    311         if ( 'payfast' != $morder->gateway ) {
    312             return;
    313         }
    314 
    315         $morder->user_id = $user_id;
    316         $morder->saveOrder();
    317 
    318         // if global is empty by query is available.
    319         if ( empty( $discount_code_id ) && isset( $_REQUEST['discount_code'] ) ) {
    320             $discount_code_id = $wpdb->get_var( "SELECT id FROM $wpdb->pmpro_discount_codes WHERE code = '" . esc_sql( sanitize_text_field( $_REQUEST['discount_code'] ) ) . "'" );
    321         }
    322 
    323         // save discount code use
    324         if ( ! empty( $discount_code_id ) ) {
    325             $wpdb->query(
    326                 $wpdb->prepare(
    327                     "INSERT INTO $wpdb->pmpro_discount_codes_uses
    328                     (code_id, user_id, order_id, timestamp)
    329                     VALUES( %d , %d, %d, %s )",
    330                     $discount_code_id,
    331                     $user_id,
    332                     $morder->id,
    333                     current_time( 'mysql' )
    334                 )
    335             );
    336         }
    337 
    338         do_action( 'pmpro_before_send_to_payfast', $user_id, $morder );
    339 
    340         $morder->Gateway->sendToPayFast( $morder );
    341     }
    342283
    343284    /**
     
    361302        $order->CardType     = '';
    362303        $order->cardtype     = '';
    363        
    364         $order->status = "review";
     304        $order->status = 'token';
    365305        $order->saveOrder();
    366306
    367         return true;
     307        pmpro_save_checkout_data_to_order( $order );
     308
     309        do_action( 'pmpro_before_send_to_payfast', $order->user_id, $order );
     310
     311        $this->sendToPayFast( $order );
    368312    }
    369313
  • pmpro-payfast/trunk/pmpro-payfast.php

    r3121260 r3159730  
    44Plugin URI: https://www.paidmembershipspro.com/add-ons/payfast-payment-gateway/
    55Description: Adds PayFast as a gateway option for Paid Memberships Pro.
    6 Version: 1.5.2
     6Version: 1.5.3
    77Author: Paid Memberships Pro
    88Author URI: https://www.paidmembershipspro.com
  • pmpro-payfast/trunk/readme.txt

    r3121261 r3159730  
    5353
    5454== Changelog ==
     55= 1.5.3 - 2024-09-30 =
     56* BUG FIX/ENHANCEMENT: Added better support for User Fields not saving correctly during checkout. (@andrewlimaza)
     57* REFACTOR: Refactored the `pmpro_itnChangeMembershipLevel` function (@andrewlimaza)
     58
    5559= 1.5.2 - 2024-07-18 =
    5660* ENHANCEMENT: Added improved support for Paid Memberships Pro V3.1+ (@andrewlimaza)
  • pmpro-payfast/trunk/services/payfast_itn_handler.php

    r3017774 r3159730  
    324324}
    325325
    326 /*
    327     Change the membership level. We also update the membership order to include filtered valus.
    328 */
     326/**
     327 * Change the membership level. We also update the membership order to include filtered values.
     328 * NOTE: Some legacy code has stayed within this function to ensure backwards compatibility.
     329 *
     330 */
    329331function pmpro_itnChangeMembershipLevel( $txn_id, &$morder ) {
    330     global $wpdb;
    331     // filter for level
    332     $morder->membership_level = apply_filters( 'pmpro_payfast_itnhandler_level', $morder->membership_level, $morder->user_id );
    333     // fix expiration date
    334     if ( ! empty( $morder->membership_level->expiration_number ) ) {
    335         $enddate = "'" . date( 'Y-m-d', strtotime( '+ ' . $morder->membership_level->expiration_number . ' ' . $morder->membership_level->expiration_period ) ) . "'";
    336     } else {
    337         $enddate = 'NULL';
    338     }
    339     // get discount code     (NOTE: but discount_code isn't set here. How to handle discount codes for PayPal Standard?)
    340     $morder->getDiscountCode();
    341     if ( ! empty( $morder->discount_code ) ) {
    342         // update membership level
    343         $morder->getMembershipLevel( true );
    344         $discount_code_id = $morder->discount_code->id;
    345     } else {
    346         $discount_code_id = '';
    347     }
    348     // set the start date to current_time('timestamp') but allow filters
    349     $startdate = apply_filters( 'pmpro_checkout_start_date', "'" . current_time( 'mysql' ) . "'", $morder->user_id, $morder->membership_level );
    350     // custom level to change user to
    351     $custom_level = array(
    352         'user_id' => $morder->user_id,
    353         'membership_id' => $morder->membership_level->id,
    354         'code_id' => $discount_code_id,
    355         'initial_payment' => $morder->membership_level->initial_payment,
    356         'billing_amount' => $morder->membership_level->billing_amount,
    357         'cycle_number' => $morder->membership_level->cycle_number,
    358         'cycle_period' => $morder->membership_level->cycle_period,
    359         'billing_limit' => $morder->membership_level->billing_limit,
    360         'trial_amount' => $morder->membership_level->trial_amount,
    361         'trial_limit' => $morder->membership_level->trial_limit,
    362         'startdate' => $startdate,
    363         'enddate' => $enddate,
    364     );
    365     global $pmpro_error;
    366     if ( ! empty( $pmpro_error ) ) {
    367         echo $pmpro_error;
    368         pmpro_payfast_itnlog( $pmpro_error );
    369     }
    370     // change level and continue "checkout"
    371     if ( pmpro_changeMembershipLevel( $custom_level, $morder->user_id ) !== false ) {
    372         // update order status and transaction ids
    373         $morder->status = 'success';
    374         $morder->payment_transaction_id = $txn_id;
    375         if ( ! empty( $_POST['token'] ) ) {
    376             $morder->subscription_transaction_id = sanitize_text_field( $_POST['m_payment_id'] );
    377         } else {
    378             $morder->subscription_transaction_id = '';
    379         }
    380         $morder->saveOrder();
    381         // add discount code use
    382         if ( ! empty( $discount_code ) && ! empty( $use_discount_code ) ) {
    383             $wpdb->query(
    384                 $wpdb->prepare(
    385                     "INSERT INTO $wpdb->pmpro_discount_codes_uses
    386                     (code_id, user_id, order_id, timestamp)
    387                     VALUES( %d, %d, %d, %s )",
    388                     $discount_code_id,
    389                     $morder->user_id,
    390                     $morder->id,
    391                     current_time( 'mysql' )
    392                 )
    393             );
    394         }
    395         // save first and last name fields
    396         if ( ! empty( $_POST['first_name'] ) ) {
    397             $old_firstname = get_user_meta( $morder->user_id, 'first_name', true );
    398             if ( ! empty( $old_firstname ) ) {
    399                 update_user_meta( $morder->user_id, 'first_name', sanitize_text_field( $_POST['first_name'] ) );
    400             }
    401         }
    402         if ( ! empty( $_POST['last_name'] ) ) {
    403             $old_lastname = get_user_meta( $morder->user_id, 'last_name', true );
    404             if ( ! empty( $old_lastname ) ) {
    405                 update_user_meta( $morder->user_id, 'last_name', sanitize_text_field( $_POST['last_name'] ) );
    406             }
    407         }
    408         // hook
    409         do_action( 'pmpro_after_checkout', $morder->user_id, $morder );
    410         // setup some values for the emails
    411         if ( ! empty( $morder ) ) {
    412             $invoice = new MemberOrder( $morder->id );
    413         } else {
    414             $invoice = null;
    415         }
    416         $user = get_userdata( $morder->user_id );
    417         $user->membership_level = $morder->membership_level;        // make sure they have the right level info
    418         // send email to member
    419         $pmproemail = new PMProEmail();
    420         $pmproemail->sendCheckoutEmail( $user, $invoice );
    421         // send email to admin
    422         $pmproemail = new PMProEmail();
    423         $pmproemail->sendCheckoutAdminEmail( $user, $invoice );
    424 
    425         return true;
    426     } else {
    427         return false;
    428     }
     332
     333    // update order status and transaction ids
     334    $morder->payment_transaction_id = $txn_id;
     335
     336    if ( ! empty( $_POST['token'] ) ) {
     337        $morder->subscription_transaction_id = sanitize_text_field( $_POST['m_payment_id'] );
     338    } else {
     339        $morder->subscription_transaction_id = '';
     340    }
     341    $morder->saveOrder(); // Temporarily save the order before processing it.
     342
     343    // Change level and complete the order.
     344    pmpro_pull_checkout_data_from_order( $morder );
     345    return pmpro_complete_async_checkout( $morder );
     346   
    429347}
    430348
Note: See TracChangeset for help on using the changeset viewer.