Changeset 3159730
- Timestamp:
- 09/30/2024 10:10:01 AM (18 months ago)
- Location:
- pmpro-payfast
- Files:
-
- 8 edited
- 1 copied
-
tags/1.5.3 (copied) (copied from pmpro-payfast/trunk)
-
tags/1.5.3/classes/class.pmprogateway_payfast.php (modified) (4 diffs)
-
tags/1.5.3/pmpro-payfast.php (modified) (1 diff)
-
tags/1.5.3/readme.txt (modified) (2 diffs)
-
tags/1.5.3/services/payfast_itn_handler.php (modified) (1 diff)
-
trunk/classes/class.pmprogateway_payfast.php (modified) (4 diffs)
-
trunk/pmpro-payfast.php (modified) (1 diff)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/services/payfast_itn_handler.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
pmpro-payfast/tags/1.5.3/classes/class.pmprogateway_payfast.php
r3121260 r3159730 43 43 add_filter( 'pmpro_required_billing_fields', array( 'PMProGateway_PayFast', 'pmpro_required_billing_fields' ) ); 44 44 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 );46 45 47 46 // itn handler … … 49 48 add_action( 'wp_ajax_pmpro_payfast_itn_handler', array( 'PMProGateway_PayFast', 'wp_ajax_pmpro_payfast_itn_handler' ) ); 50 49 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 array59 */60 static function pmpro_gateways_with_pending_status( $gateways ) {61 $gateways[] = 'payfast';62 63 return $gateways;64 50 } 65 51 … … 295 281 } 296 282 297 /**298 * Instead of change membership levels, send users to PayFast to pay.299 *300 * @since 1.8301 */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 pay306 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 use324 if ( ! empty( $discount_code_id ) ) {325 $wpdb->query(326 $wpdb->prepare(327 "INSERT INTO $wpdb->pmpro_discount_codes_uses328 (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 }342 283 343 284 /** … … 361 302 $order->CardType = ''; 362 303 $order->cardtype = ''; 363 364 $order->status = "review"; 304 $order->status = 'token'; 365 305 $order->saveOrder(); 366 306 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 ); 368 312 } 369 313 -
pmpro-payfast/tags/1.5.3/pmpro-payfast.php
r3121260 r3159730 4 4 Plugin URI: https://www.paidmembershipspro.com/add-ons/payfast-payment-gateway/ 5 5 Description: Adds PayFast as a gateway option for Paid Memberships Pro. 6 Version: 1.5. 26 Version: 1.5.3 7 7 Author: Paid Memberships Pro 8 8 Author URI: https://www.paidmembershipspro.com -
pmpro-payfast/tags/1.5.3/readme.txt
r3121261 r3159730 4 4 Requires at least: 5.0 5 5 Tested up to: 6.6 6 Stable tag: 1.5. 26 Stable tag: 1.5.3 7 7 License: GPLv2 8 8 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 53 53 54 54 == 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 55 59 = 1.5.2 - 2024-07-18 = 56 60 * ENHANCEMENT: Added improved support for Paid Memberships Pro V3.1+ (@andrewlimaza) -
pmpro-payfast/tags/1.5.3/services/payfast_itn_handler.php
r3017774 r3159730 324 324 } 325 325 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 */ 329 331 function 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 429 347 } 430 348 -
pmpro-payfast/trunk/classes/class.pmprogateway_payfast.php
r3121260 r3159730 43 43 add_filter( 'pmpro_required_billing_fields', array( 'PMProGateway_PayFast', 'pmpro_required_billing_fields' ) ); 44 44 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 );46 45 47 46 // itn handler … … 49 48 add_action( 'wp_ajax_pmpro_payfast_itn_handler', array( 'PMProGateway_PayFast', 'wp_ajax_pmpro_payfast_itn_handler' ) ); 50 49 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 array59 */60 static function pmpro_gateways_with_pending_status( $gateways ) {61 $gateways[] = 'payfast';62 63 return $gateways;64 50 } 65 51 … … 295 281 } 296 282 297 /**298 * Instead of change membership levels, send users to PayFast to pay.299 *300 * @since 1.8301 */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 pay306 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 use324 if ( ! empty( $discount_code_id ) ) {325 $wpdb->query(326 $wpdb->prepare(327 "INSERT INTO $wpdb->pmpro_discount_codes_uses328 (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 }342 283 343 284 /** … … 361 302 $order->CardType = ''; 362 303 $order->cardtype = ''; 363 364 $order->status = "review"; 304 $order->status = 'token'; 365 305 $order->saveOrder(); 366 306 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 ); 368 312 } 369 313 -
pmpro-payfast/trunk/pmpro-payfast.php
r3121260 r3159730 4 4 Plugin URI: https://www.paidmembershipspro.com/add-ons/payfast-payment-gateway/ 5 5 Description: Adds PayFast as a gateway option for Paid Memberships Pro. 6 Version: 1.5. 26 Version: 1.5.3 7 7 Author: Paid Memberships Pro 8 8 Author URI: https://www.paidmembershipspro.com -
pmpro-payfast/trunk/readme.txt
r3121261 r3159730 53 53 54 54 == 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 55 59 = 1.5.2 - 2024-07-18 = 56 60 * ENHANCEMENT: Added improved support for Paid Memberships Pro V3.1+ (@andrewlimaza) -
pmpro-payfast/trunk/services/payfast_itn_handler.php
r3017774 r3159730 324 324 } 325 325 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 */ 329 331 function 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 429 347 } 430 348
Note: See TracChangeset
for help on using the changeset viewer.