示例#1
0
function premise_recurring_payment_handler()
{
    global $premise_cron_args, $wpdb;
    if (is_user_logged_in() || !function_exists('memberaccess_get_cron_key')) {
        return;
    }
    if (!is_array($premise_cron_args) || empty($premise_cron_args['key']) || memberaccess_get_cron_key() != $premise_cron_args['key']) {
        return;
    }
    $now = time();
    // check for expired subscriptions
    $expired_subscriptions = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_renewal_time' AND meta_value BETWEEN %s AND %s", $now - 259200, $now - 172800));
    if (!empty($expired_subscriptions)) {
        foreach ($expired_subscriptions as $order) {
            $order_status = get_post_meta($order, '_acp_order_status', true);
            if ($order_status == __('cancel', 'premise')) {
                continue;
            }
            AccessPress_Orders::cancel_subscription($order, false);
        }
    }
    // try renewing over a 3 day window
    $subscriptions = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_renewal_time' AND meta_value BETWEEN %s AND %s", $now - 172800, $now + 86400));
    if (!empty($subscriptions)) {
        $orders = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'acp-orders' AND post_status = 'publish' AND ID IN (" . implode(',', $subscriptions) . ')');
    }
    if (empty($orders)) {
        premise_recurring_payment_notification(__('No subscriptions to renew.', 'premise'));
    }
    $results = array();
    foreach ($orders as $order) {
        $order_status = get_post_meta($order, '_acp_order_status', true);
        if ($order_status == __('cancel', 'premise')) {
            continue;
        }
        $order_post = get_post($order);
        $result = AccessPress_Orders::renew_subscription($order, false);
        if (!$result) {
            $results[] = sprintf(__('Could not find product on order # %s', 'premise'), $order_post->post_name);
            continue;
        }
        if (is_wp_error($result)) {
            $results[] = sprintf(__('Error on order # %s - %s', 'premise'), $order_post->post_name, $result->get_error_message());
            continue;
        }
        $product = get_post($result['product_id']);
        $results[] = sprintf(__('Processed order # %d - %s - %s - Amount %.2f', 'premise'), $order, $order_post->post_name, $product->post_title, $result['order_details']['_acp_order_price']);
    }
    premise_recurring_payment_notification(implode("\n", $results));
}
示例#2
0
文件: report.php 项目: juslee/e27
 function build_renewal_table($start_date_ts, $end_date_ts, $product_id, $coupon_id, $export)
 {
     global $wpdb;
     $meta_where = '';
     if ($product_id) {
         $meta_where .= $wpdb->prepare(" AND post_id IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_product_id' AND meta_value = %d)", $product_id);
     }
     if ($coupon_id) {
         $meta_where .= $wpdb->prepare(" AND post_id IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_coupon_id' AND meta_value = %d)", $coupon_id);
     }
     $subscriptions = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_renewal_time' AND meta_value BETWEEN %s AND %s{$meta_where}", $start_date_ts, $end_date_ts));
     if (empty($subscriptions)) {
         return array();
     }
     $order_rows = $wpdb->get_results("SELECT ID, post_title FROM {$wpdb->posts} WHERE post_type = 'acp-orders' AND post_status = 'publish' AND ID IN (" . implode(',', $subscriptions) . ')');
     $orders = array();
     foreach ($order_rows as $row) {
         $orders[$row->ID] = $row->post_title;
     }
     $details = $wpdb->get_results("SELECT * FROM {$wpdb->postmeta} WHERE post_id IN (" . implode(',', array_keys($orders)) . ')');
     if (empty($orders) || empty($details)) {
         return array();
     }
     $order_details = array();
     $order_table = array('header' => array(__('ID', 'premise'), __('Email', 'premise'), __('Member', 'premise'), __('Product', 'premise'), __('Purchase Date', 'premise'), __('Renewal Date', 'premise'), __('Subscription Price', 'premise')));
     if ($export) {
         $order_table['header'] = array_merge($order_table['header'], array(__('Trial Price', 'premise'), __('Status', 'premise'), __('Coupon', 'premise'), __('Gateway', 'premise'), __('Transaction ID', 'premise')));
     } else {
         $order_table['header'][] = __('Action', 'premise');
     }
     $date_format = get_option('date_format');
     $order_total = 0;
     foreach ($details as $meta) {
         if (!isset($order_details[$meta->post_id])) {
             $order_details[$meta->post_id] = array();
         }
         $order_details[$meta->post_id][$meta->meta_key] = $meta->meta_value;
         if ($meta->meta_key == '_acp_order_price') {
             $order_total += $meta->meta_value;
         }
     }
     if ($raw) {
         return $order_details;
     }
     $order_sort = array();
     foreach ($orders as $order => $title) {
         $key = $order_details[$order->ID]['_acp_order_renewal_time'];
         while (isset($order_sort[$key])) {
             $key++;
         }
         $order_sort[$key] = $order;
     }
     ksort($order_sort);
     foreach ($order_sort as $order) {
         $row = array($title);
         $user = isset($order_details[$order]['_acp_order_member_id']) ? get_user_by('id', $order_details[$order]['_acp_order_member_id']) : null;
         $row[] = $user ? $user->user_email : '';
         $row[] = $user ? sprintf('%s - %s %s', $user->user_login, $user->first_name, $user->last_name) : '';
         $product = isset($order_details[$order]['_acp_order_product_id']) ? get_post($order_details[$order]['_acp_order_product_id']) : null;
         $row[] = $product ? $product->post_title : '';
         $row[] = isset($order_details[$order]['_acp_order_time']) ? date($date_format, $order_details[$order]['_acp_order_time']) : '';
         $row[] = isset($order_details[$order]['_acp_order_renewal_time']) ? date($date_format, $order_details[$order]['_acp_order_renewal_time']) : '';
         $row[] = isset($order_details[$order]['_acp_order_price']) ? $order_details[$order]['_acp_order_price'] : '';
         if ($export) {
             $row[] = isset($order_details[$order]['_acp_order_trial_price']) ? $order_details[$order]['_acp_order_trial_price'] : '';
             $row[] = isset($order_details[$order]['_acp_order_status']) ? $order_details[$order]['_acp_order_status'] : '';
             $coupon = isset($order_details[$order]['_acp_order_coupon_id']) ? get_post($order_details[$order]['_acp_order_coupon_id']) : null;
             $row[] = $coupon ? $coupon->post_title : '';
             $gateway = AccessPress_Orders::find_gateway($order);
             $row[] = $gateway ? $gateway->payment_method : '';
             $row[] = $gateway && $gateway->has_transaction_meta($order) ? $gateway->has_transaction_meta($order) : '';
         } else {
             $renew_url = add_query_arg(array('action' => 'renew', 'subscription' => $order, 'key' => wp_create_nonce('renew-subscription-' . $order)), menu_page_url('premise-reports', false));
             $row[] = sprintf(__('<a href="%s" %s>Renew</a>', 'premise'), $renew_url, 'target="_blank"');
         }
         $order_table[$order] = $row;
     }
     if (!$export) {
         $order_table['total'] = array(__('Total Sales', 'premise'), '', '', count($orders), $order_total);
     }
     return $order_table;
 }