Created
May 29, 2019 00:21
-
-
Save kimcoleman/8450638b25d358dc01acd119affc2d59 to your computer and use it in GitHub Desktop.
Create random orders across a time period for all active members on your site. Useful for demos.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Create random orders for all members. | |
* visit /wp-admin/?create_random_orders=1 to generate orders, then remove this code | |
* Warning, this can time out or slow your server if you have many members or a long timeframe. | |
*/ | |
function pmproc_create_random_orders() { | |
global $wpdb; | |
if ( empty( $_REQUEST['create_random_orders'] ) ) { | |
return; | |
} | |
// Some vars | |
$today = current_time( 'timestamp' ); | |
$date_range_start = strtotime( '2018-01-01' ); | |
$date_range_end = $today; | |
$cancel_rate = .02; | |
// Get all members | |
$member_ids = $wpdb->get_col( "SELECT user_id FROM $wpdb->pmpro_memberships_users WHERE status = 'active'" ); | |
$orders = array(); | |
foreach( $member_ids as $member_id ) { | |
$member = get_userdata( $member_id ); | |
// Give them a random start date from the past 2 years | |
$start_date = date('Y-m-d H:i:s', rand( $date_range_start, $date_range_end ) ); | |
$sqlQuery = "UPDATE $wpdb->users SET user_registered = '" . esc_sql( $start_date ) . "' WHERE ID = '" . esc_sql( $member_id ) . "' LIMIT 1"; | |
$wpdb->query( $sqlQuery ); | |
$sqlQuery = "UPDATE $wpdb->pmpro_memberships_users SET startdate = '" . esc_sql( $start_date ) . "' WHERE user_id = '" . esc_sql( $member_id ) . "' LIMIT 1"; | |
$wpdb->query( $sqlQuery ); | |
// Create orders with a random chance to cancel | |
$member_level = pmpro_getMembershipLevelForUser( $member_id ); | |
if ( empty( $member_level ) || empty( $member_level->cycle_period ) ) { | |
continue; | |
} | |
$next_order_date = strtotime( '+' . $member_level->cycle_number . ' ' . $member_level->cycle_period, strtotime( $start_date ) ); | |
while( $next_order_date < $date_range_end ) { | |
$morder = new MemberOrder(); | |
$morder->timestamp = date( 'Y-m-d H:i:s', $next_order_date ); | |
$morder->membership_id = $member_level->id; | |
$morder->membership_name = $member_level->name; | |
//$morder->discount_code = $discount_code; | |
$morder->InitialPayment = $member_level->billing_amount; | |
$morder->PaymentAmount = $member_level->billing_amount; | |
$morder->ProfileStartDate = $start_date; | |
$morder->BillingPeriod = $member_level->billing_period; | |
$morder->BillingFrequency = $member_level->billing_number; | |
$morder->Email = $member->user_email; | |
$morder->user_id = $member_id; | |
$morder->billing = new stdClass(); | |
$morder->billing->name = $member->pmpro_bfirstname . " " . $member->pmpro_blastname; | |
$morder->billing->street = trim( $member->pmpro_baddress1 . " " . $member->pmpro_baddress2 ); | |
$morder->billing->city = $member->pmpro_bcity; | |
$morder->billing->state = $member->pmpro_bstate; | |
$morder->billing->country = $member->pmpro_bcountry; | |
$morder->billing->zip = $member->pmpro_bzipcode; | |
$morder->billing->phone = $member->pmpro_bphone; | |
$gateway = pmpro_getOption("gateway"); | |
$morder->gateway = $gateway; | |
$morder->setGateway(); | |
$morder->getMembershipLevelAtCheckout(); | |
$morder->subtotal = $morder->InitialPayment; | |
$morder->getTax(); | |
// Chance they cancelled | |
$cancelled = rand( 0, 100 ) < $cancel_rate * 100; | |
if( $cancelled ) { | |
$morder->status = 'cancelled'; | |
$sqlQuery = "UPDATE $wpdb->pmpro_memberships_users | |
SET status = 'cancelled', enddate = '" . esc_sql( date('Y-m-d H:i:s', $next_order_date ) ) . "' | |
WHERE user_id = '" . esc_sql( $member_id ) . "' AND status = 'active'"; | |
$wpdb->query( $sqlQuery ); | |
$next_order_date = strtotime( '2038-01-19' ); | |
} else { | |
$morder->status = 'success'; | |
$next_order_date = strtotime( '+' . $member_level->cycle_number . ' ' . $member_level->cycle_period, $next_order_date ); | |
} | |
$orders[$morder->timestamp] = $morder; | |
echo ". "; | |
} | |
} | |
echo "<br />"; | |
ksort($orders); | |
foreach( $orders as $order ) { | |
$order->saveOrder(); | |
echo "x "; | |
} | |
exit; | |
} | |
add_action( 'admin_init', 'pmproc_create_random_orders' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment