Skip to content

Instantly share code, notes, and snippets.

@kimcoleman
Created May 29, 2019 00:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kimcoleman/8450638b25d358dc01acd119affc2d59 to your computer and use it in GitHub Desktop.
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.
/**
* 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