コード例 #1
0
/**
 * Create a new order or update an existing
 *
 * @param array
 *
 * @return LP_Order instance
 */
function learn_press_update_order($order_data)
{
    return learn_press_create_order($order_data);
}
コード例 #2
0
 /**
  * Creates temp new order if needed
  *
  * @return mixed|WP_Error
  * @throws Exception
  */
 function create_order()
 {
     global $wpdb;
     // Third-party can be controls to create a order
     if ($order_id = apply_filters('learn_press_create_order', null, $this)) {
         return $order_id;
     }
     try {
         // Start transaction if available
         //$wpdb->query( 'START TRANSACTION' );
         $order_data = array('status' => apply_filters('learn_press_default_order_status', 'pending'), 'user_id' => get_current_user_id(), 'user_note' => isset($_REQUEST['order_comments']) ? $_REQUEST['order_comments'] : '', 'created_via' => 'checkout');
         // Insert or update the post data
         $order_id = absint(LP()->session->order_awaiting_payment);
         // Resume the unpaid order if its pending
         if ($order_id > 0 && ($order = learn_press_get_order($order_id)) && $order->has_status(array('pending', 'failed'))) {
             $order_data['ID'] = $order_id;
             $order = learn_press_update_order($order_data);
             if (is_wp_error($order)) {
                 throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 401));
             } else {
                 $order->remove_order_items();
                 //do_action( 'learn_press_resume_order', $order_id );
             }
         } else {
             $order = learn_press_create_order($order_data);
             if (is_wp_error($order)) {
                 throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 400));
             } else {
                 $order_id = $order->id;
                 do_action('learn_press_new_order', $order_id);
             }
         }
         // Store the line items to the new/resumed order
         foreach (LP()->cart->get_items() as $item) {
             if (empty($item['order_item_name']) && !empty($item['item_id']) && ($course = LP_Course::get_course($item['item_id']))) {
                 $item['order_item_name'] = $course->get_title();
             } else {
                 throw new Exception(sprintf(__('Item does not exists!', 'learn_press'), 402));
             }
             $item_id = $order->add_item($item);
             if (!$item_id) {
                 throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 402));
             }
             // Allow plugins to add order item meta
             do_action('learn_press_add_order_item_meta', $item_id, $item);
         }
         $order->set_payment_method($this->payment_method);
         // Update user meta
         if (!empty($this->user_id)) {
             if (apply_filters('learn_press_checkout_update_user_data', true, $this)) {
                 // TODO: update user meta
             }
             do_action('learn_press_checkout_update_user_meta', $this->user_id, $_REQUEST);
         }
         // Third-party add meta data
         do_action('learn_press_checkout_update_order_meta', $order_id, $_REQUEST);
         //$wpdb->query( 'COMMIT' );
     } catch (Exception $e) {
         // There was an error adding order data!
         $wpdb->query('ROLLBACK');
         echo $e->getMessage();
         return false;
         //$e->getMessage();
     }
     return $order_id;
 }