/** * 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); }
/** * 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; }