Exemplo n.º 1
0
function pmpro_cron_expire_memberships()
{
    global $wpdb;
    //make sure we only run once a day
    $today = date("Y-m-d", current_time("timestamp"));
    //look for memberships that expired before today
    $sqlQuery = "SELECT mu.user_id, mu.membership_id, mu.startdate, mu.enddate FROM {$wpdb->pmpro_memberships_users} mu WHERE mu.status = 'active' AND mu.enddate IS NOT NULL AND mu.enddate <> '' AND mu.enddate <> '0000-00-00 00:00:00' AND DATE(mu.enddate) <= '" . $today . "' ORDER BY mu.enddate";
    if (defined('PMPRO_CRON_LIMIT')) {
        $sqlQuery .= " LIMIT " . PMPRO_CRON_LIMIT;
    }
    $expired = $wpdb->get_results($sqlQuery);
    foreach ($expired as $e) {
        do_action("pmpro_membership_pre_membership_expiry", $e->user_id, $e->membership_id);
        //remove their membership
        pmpro_changeMembershipLevel(false, $e->user_id, 'expired');
        do_action("pmpro_membership_post_membership_expiry", $e->user_id, $e->membership_id);
        $send_email = apply_filters("pmpro_send_expiration_email", true, $e->user_id);
        if ($send_email) {
            //send an email
            $pmproemail = new PMProEmail();
            $euser = get_userdata($e->user_id);
            $pmproemail->sendMembershipExpiredEmail($euser);
            if (current_user_can('manage_options')) {
                printf(__("Membership expired email sent to %s. ", "pmpro"), $euser->user_email);
            } else {
                echo ". ";
            }
        }
    }
}
Exemplo n.º 2
0
	function pmpro_cron_expire_memberships()
	{
		global $wpdb;
				
		//make sure we only run once a day
		$today = date("Y-m-d");
		
		//look for memberships that expired before today
		$sqlQuery = "SELECT mu.user_id, mu.membership_id, mu.startdate, mu.enddate FROM $wpdb->pmpro_memberships_users mu WHERE mu.status = 'active' AND mu.enddate IS NOT NULL AND mu.enddate <> '' AND mu.enddate <> '0000-00-00 00:00:00' AND DATE(mu.enddate) <= '" . $today . "' ORDER BY mu.enddate";
						
		$expired = $wpdb->get_results($sqlQuery);
				
		foreach($expired as $e)
		{						
			//remove their membership
			pmpro_changeMembershipLevel(false, $e->user_id);
			
			$send_email = apply_filters("pmpro_send_expiration_email", true, $e->user_id);
			if($send_email)
			{
				//send an email
				$pmproemail = new PMProEmail();
				$euser = get_userdata($e->user_id);		
				$pmproemail->sendMembershipExpiredEmail($euser);
				
				echo "Membership expired email sent to " . $euser->user_email . ". ";
			}
		}
	}
function pmpropbc_cancel_overdue_orders()
{
    global $wpdb;
    //make sure we only run once a day
    $now = current_time('timestamp');
    $today = date("Y-m-d", $now);
    //have to run for each level, so get levels
    $levels = pmpro_getAllLevels(true, true);
    if (empty($levels)) {
        return;
    }
    foreach ($levels as $level) {
        //get options
        $options = pmpropbc_getOptions($level->id);
        if (!empty($options['cancel_days'])) {
            $date = date("Y-m-d", strtotime("+ " . $options['cancel_days'] . " days", $now));
        } else {
            $date = $today;
        }
        //need to get all combos of pay cycle and period
        $sqlQuery = "SELECT DISTINCT(CONCAT(cycle_number, ' ', cycle_period)) FROM {$wpdb->pmpro_memberships_users} WHERE membership_id = '" . $level->id . "' AND cycle_number > 0 AND status = 'active'";
        $combos = $wpdb->get_col($sqlQuery);
        if (empty($combos)) {
            continue;
        }
        foreach ($combos as $combo) {
            //get all check orders still pending after X days
            $sqlQuery = "\r\n\t\t\t\tSELECT id \r\n\t\t\t\tFROM {$wpdb->pmpro_membership_orders} \r\n\t\t\t\tWHERE membership_id = {$level->id} \r\n\t\t\t\t\tAND gateway = 'check' \r\n\t\t\t\t\tAND status = 'pending' \r\n\t\t\t\t\tAND DATE_ADD(timestamp, INTERVAL {$combo}) <= '" . $date . "'\r\n\t\t\t\t\tAND notes NOT LIKE '%Cancelled:%' AND notes NOT LIKE '%Cancellation Skipped:%'\r\n\t\t\t\tORDER BY id\r\n\t\t\t";
            if (defined('PMPRO_CRON_LIMIT')) {
                $sqlQuery .= " LIMIT " . PMPRO_CRON_LIMIT;
            }
            $orders = $wpdb->get_col($sqlQuery);
            if (empty($orders)) {
                continue;
            }
            foreach ($orders as $order_id) {
                //get the order and user data
                $order = new MemberOrder($order_id);
                $user = get_userdata($order->user_id);
                $user->membership_level = pmpro_getMembershipLevelForUser($order->user_id);
                //if they are no longer a member, let's not send them an email
                if (empty($user->membership_level) || empty($user->membership_level->ID) || $user->membership_level->id != $order->membership_id) {
                    //note when we send the reminder
                    $new_notes = $order->notes . "Cancellation Skipped:" . $today . "\n";
                    $wpdb->query("UPDATE {$wpdb->pmpro_membership_orders} SET notes = '" . esc_sql($new_notes) . "' WHERE id = '" . $order_id . "' LIMIT 1");
                    continue;
                }
                //cancel the order and subscription
                do_action("pmpro_membership_pre_membership_expiry", $order->user_id, $order->membership_id);
                //remove their membership
                pmpro_changeMembershipLevel(false, $order->user_id, 'expired');
                do_action("pmpro_membership_post_membership_expiry", $order->user_id, $order->membership_id);
                $send_email = apply_filters("pmpro_send_expiration_email", true, $order->user_id);
                if ($send_email) {
                    //send an email
                    $pmproemail = new PMProEmail();
                    $euser = get_userdata($order->user_id);
                    $pmproemail->sendMembershipExpiredEmail($euser);
                    if (current_user_can('manage_options')) {
                        printf(__("Membership expired email sent to %s. ", "pmpro"), $euser->user_email);
                    } else {
                        echo ". ";
                    }
                }
            }
        }
    }
}