/** * Prepares and returns a new Order * @return Colabs_Order New Order object */ protected static function make($items = array(), $description = '') { if (empty($description)) { $description = __('Transaction ID ', 'colabsthemes'); } $order_id = wp_insert_post(array('post_title' => $description, 'post_content' => __('Transaction Data', 'colabsthemes'), 'post_type' => COLABS_ORDER_POST_TYPE, 'post_status' => COLABS_ORDER_PENDING)); if ($order_id) { update_post_meta($order_id, '_order_type', COLABS_POST_TYPE); if ($items) { foreach ($items as $key => $value) { update_post_meta($order_id, $key, $value); } } if (isset($_SERVER['REMOTE_ADDR'])) { update_post_meta($order_id, '_ip_address', $_SERVER['REMOTE_ADDR']); } $order = colabs_get_order($order_id); $order->set_currency(get_option('colabs_currency_code')); return $order; } }
function colabs_property_parse_query($wp_query) { if ($wp_query->is_main_query() && is_page(get_option('colabs_dashboard_page_id'))) { if (get_query_var('order_cancel') || get_query_var('order_status')) { $wp_query->set('tab', 'orders'); } if (get_query_var('order_status')) { $wp_query->set('order_status', array_map('wp_strip_all_tags', get_query_var('order_status'))); } if (get_query_var('order_cancel')) { $order = colabs_get_order(intval(get_query_var('order_cancel'))); if (get_current_user_id() != $order->get_author()) { $wp_query->set('order_cancel_msg', -1); return; } if (COLABS_ORDER_COMPLETED == $order->get_status()) { $wp_query->set('order_cancel_msg', -2); return; } if (!empty($order) && get_query_var('confirm_order_cancel')) { $order->failed(); $wp_query->set('order_cancel_success', 1); } } elseif (get_query_var('property_end') && get_query_var('confirm')) { $property_id = intval(get_query_var('property_end')); $property = get_post($property_id); if ($property->ID != $property_id || $property->post_author != get_current_user_id()) { $wp_query->set('property_action', -1); return; } if (get_query_var('cancel')) { $pending_payment = colabs_get_pending_payment($property_id); $order = colabs_get_order($pending_payment[$property_id]['order_id']); if ($order && !in_array($order->get_status(), array(COLABS_ORDER_ACTIVATED, COLABS_ORDER_COMPLETED))) { $order->failed(); } else { _colabs_end_property($property_id, $cancel = true); } $wp_query->set('property_action', 1); } else { _colabs_end_property($property_id); $wp_query->set('property_action', 2); } // Property delete } elseif (get_query_var('property_delete')) { _colabs_delete_property(get_query_var('property_delete')); // Property mark as sold } elseif (get_query_var('property_marksold')) { $property_id = get_query_var('property_marksold'); update_post_meta($property_id, 'colabs_property_sold', 'true'); $sold_term = get_term_by('slug', 'sold', COLABS_TAX_STATUS); if ($sold_term) { // Save previous property_status into a post meta update_post_meta($property_id, '_colabs_previous_property_status', wp_get_post_terms($property_id, COLABS_TAX_STATUS, array('fields' => 'ids'))); wp_set_post_terms($property_id, $sold_term->term_id, COLABS_TAX_STATUS); } // Property set unsold } elseif (get_query_var('property_unsold')) { $property_id = get_query_var('property_unsold'); update_post_meta($property_id, 'colabs_property_sold', 'false'); $previous_status = get_post_meta($property_id, '_colabs_previous_property_status', true); if ($previous_status) { wp_set_post_terms($property_id, $previous_status, COLABS_TAX_STATUS); } else { $sell_term = get_term_by('slug', 'sell', COLABS_TAX_STATUS); if ($sell_term) { wp_set_post_terms($id, $sell_term->term_id, COLABS_TAX_STATUS); } } } } if ($wp_query->is_main_query() && is_page(get_option('colabs_submit_page_id'))) { if ($wp_query->get('property_relist')) { $property_id = $wp_query->get('property_relist'); // if ( is_user_logged_in() && ! current_user_can('can_submit_property') ) { // wp_redirect( home_url() ); // exit(); // } if (!colabs_allow_relist()) { redirect_myproperties(); } $wp_query->set('property_id', $property_id); } } }
function colabs_get_post_order_status($post_id, $pending_payment = '') { $order_status = ''; if (isset($pending_payment[$post_id])) { $order = colabs_get_order($pending_payment[$post_id]['order_id']); if ($order) { if (COLABS_ORDER_FAILED == $order->get_status()) { $order_status = __('Payment Failed', 'colabsthemes'); } elseif (COLABS_ORDER_ACTIVATED == $order->get_status()) { $order_status = __('Active', 'colabsthemes'); } elseif ('undecided' == $pending_payment[$post_id]['status']) { $order_status = __('Pending Payment', 'colabsthemes'); } else { $order_status = __('Pending Approval', 'colabsthemes'); } } } return $order_status; }
/** * Processes a Order to display * instructions to the user * @param Colabs_Order $order Order to display information for * @return void */ public function process($order) { // if gateway wasn't selected then exit if ($order['colabs_payment_method'] != 'authorize_aim') { return; } if (is_array($order)) { // is this a test transaction? if (get_option('colabs_authorize_sandbox') == true) { $process_url = 'https://test.authorize.net/gateway/transact.dll'; } else { $process_url = 'https://secure.authorize.net/gateway/transact.dll'; } $authorizeaim_args = array('x_login' => get_option('colabs_authorize_id'), 'x_tran_key' => get_option('colabs_authorize_key'), 'x_version' => '3.1', 'x_delim_data' => 'TRUE', 'x_delim_char' => '|', 'x_relay_response' => 'FALSE', 'x_type' => 'AUTH_CAPTURE', 'x_method' => 'CC', 'x_card_num' => $_POST['aim_creditcard'], 'x_exp_date' => $_POST['aim_ccexpdate'], 'x_description' => 'Order #' . $order['order_id'], 'x_amount' => $order['item_amount'], 'x_card_code' => $_POST['aim_cvvnumber']); $post_response = wp_remote_retrieve_body(wp_remote_post($process_url, array('body' => $authorizeaim_args, 'sslverify' => false))); $response_array = explode('|', $post_response); $order_class = colabs_get_order($order['order_id']); $error = 0; if (count($response_array) > 1) { if ($response_array[0] == '1') { $payment_details = array('currency' => get_option('colabs_currency_code'), 'timestamp' => current_time('mysql'), 'txn_id' => $response_array[4], 'payment' => 'Authorize AIM', 'note' => $response_array[51]); $order_class->complete($payment_details); } else { $payment_details['note'] = $response_array[3]; $order_class->pending($payment_details); $error = 1; } $info_message = $response_array[3]; } else { $order_class->failed(); $error = 1; } } if ($error == 0) { echo '<p class="alert alert-success">' . $info_message . '</p>'; } else { echo '<p class="alert alert-danger">' . $info_message . '</p>'; } ?> <h4><?php _e('Your Transaction Details', 'colabsthemes'); ?> </h4> <ul> <li><span><?php _e('Transaction ID:', 'colabsthemes'); ?> </span><?php echo esc_html($order['order_id']); ?> </li> <li><span><?php _e('Reference #:', 'colabsthemes'); ?> </span><?php echo esc_attr($order['post_id']); ?> </li> <li><span><?php _e('Total Amount:', 'colabsthemes'); ?> </span><?php echo colabs_get_price($order['item_amount']); ?> </li> </ul> <?php }
</th> </tr> </thead> <tbody> <?php if ($orders->have_posts()) { ?> <?php while ($orders->have_posts()) { $orders->the_post(); ?> <?php $order = colabs_get_order($orders->post->ID); ?> <tr> <td class="order-history-id" data-title="<?php echo 'ID'; ?> ">#<?php the_ID(); ?> </td> <td class="date" data-title="<?php _e('Date', 'colabsthemes'); ?> "><strong><?php the_time(__('j M', 'colabsthemes')); ?>
if (!empty($_POST['colabs_payment_method']) && empty($get_gateway)) { $order->set_gateway($_POST['colabs_payment_method']); } $gateway_id = $_POST['colabs_payment_method']; $gateway = Colabs_Gateway_Registry::get_gateway($gateway_id); if (Colabs_Gateway_Registry::is_gateway_enabled($gateway_id)) { $receipt_order['order_id'] = $order->get_id(); $receipt_order['post_id'] = $order->get_post_type_id(); $receipt_order['item_name'] = get_the_title($order->get_post_type_id()); $receipt_order['item_amount'] = $order->get_total(); $receipt_order['colabs_payment_method'] = $gateway_id; $gateway->process($receipt_order); } } else { the_order_summary(); $orders = colabs_get_order($order_id); if ($orders->get_total() > 0) { ?> <form action="" method="POST" class="payment-form"> <p><?php _e('Please select a method for processing your payment:', 'colabsthemes'); ?> </p> <input type="hidden" name="action" value="payment-process" /> <input type="hidden" name="referer" value="<?php echo esc_url(get_query_var('referer')); ?> " /> <input type="hidden" name="order_id" value="<?php echo $order_id; ?>
private function find_next_processable_subscription_order($subscription_id) { $posts = new WP_Query(array('post_type' => COLABS_ORDER_POST_TYPE, 'post_status' => array(COLABS_ORDER_PENDING, COLABS_ORDER_FAILED), 'meta_query' => array(array('key' => 'paypal_subscription_id', 'value' => $subscription_id)), 'order' => 'ASC', 'orderby' => 'date')); if (count($posts->posts) == 0) { return false; } return colabs_get_order($posts->post->ID); }
function colabs_listing_handle_payment_return() { // PayPal IPN handling code if ((isset($_POST['payment_status']) || isset($_POST['txn_type'])) && isset($_POST['item_number']) && 'paypal' == $_GET['payment-gateway-api']) { //Common variables $amount = $_POST['mc_gross']; $currency = $_POST['mc_currency']; $order_id = $_POST['item_number']; if (!empty($order_id)) { $order = colabs_get_order($order_id); // process PayPal response $paypal = array('currency' => $currency, 'timestamp' => $_POST['payment_date'], 'status' => $_POST['payment_status'], 'txn_id' => $_POST['txn_id'], 'payment' => 'Paypal', 'note' => ''); switch ($_POST['payment_status']) { case 'Partially-Refunded': break; case 'Completed': case 'Processed': $order->complete($paypal); break; case 'Refunded': $note = __('Last transaction has been reversed. Reason: Payment has been refunded', 'colabsthemes'); $paypal['note'] = $note; $order->failed($paypal); break; case 'Reversed': $note = __('Last transaction has been reversed. Reason: Payment has been reversed (charge back)', 'colabsthemes'); $paypal['note'] = $note; $order->failed($paypal); break; case 'Denied': $note = __('Last transaction has been reversed. Reason: Payment Denied', 'colabsthemes'); $paypal['note'] = $note; $order->failed($paypal); break; case 'In-Progress': case 'Pending': $pending_str = array('address' => __('Customer did not include a confirmed shipping address', 'colabsthemes'), 'authorization' => __('Funds not captured yet', 'colabsthemes'), 'echeck' => __('eCheck that has not cleared yet', 'colabsthemes'), 'intl' => __('Payment waiting for approval by service provider', 'colabsthemes'), 'multi-currency' => __('Payment waiting for service provider to handle multi-currency process', 'colabsthemes'), 'unilateral' => __('Customer did not register or confirm his/her email yet', 'colabsthemes'), 'upgrade' => __('Waiting for service provider to upgrade the PayPal account', 'colabsthemes'), 'verify' => __('Waiting for service provider to verify his/her PayPal account', 'colabsthemes'), 'paymentreview' => __('Paypal is currently reviewing the payment and will approve or reject within 24 hours', 'colabsthemes'), '*' => ''); $reason = @$_POST['pending_reason']; $note = __('Last transaction is pending. Reason: ', 'colabsthemes') . (isset($pending_str[$reason]) ? $pending_str[$reason] : $pending_str['*']); $paypal['note'] = $note; $order->pending($paypal); break; default: } } } }