Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 23 additions & 9 deletions ecommerce/HooksHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -285,23 +285,33 @@ public function handle_payment_status_changed( $order_id, $prev_payment_status,
* Clear cart items, managing enrollment & earnings
*
* @since 3.0.0
* @since 4.2.1 manage earnings and enrollment only for the buyer's unprocessed order.
*
* @param int $order_id Order id.
*
* @return void
*/
public function handle_order_placement_success( int $order_id ) {
$order_data = $this->order_model->get_order_by_id( $order_id );
if ( $order_data ) {
$user_id = $order_data->student->id;
if ( ! $order_data ) {
return;
}

( new CartModel() )->clear_user_cart( $user_id );
$user_id = $order_data->student->id;
( new CartModel() )->clear_user_cart( $user_id );

// Manage enrollment & earnings.
$order = ( new OrderModel() )->get_order_by_id( $order_id );
$payment_status = $order->payment_status;
/**
* Skip if the order is already processed, otherwise revisiting the success URL
* re-activates expired/cancelled enrollments and recalculates earnings.
*
* @since 4.2.1
*/
$is_processed = isset( $order_data->enrollment ) || Earnings::get_instance()->is_exist_order_earning( $order_id );

$order_status = $this->order_model->get_order_status_by_payment_status( $payment_status );
if ( get_current_user_id() === $user_id && ! $is_processed ) {
// Manage enrollment & earnings.
$payment_status = $order_data->payment_status;
$order_status = $this->order_model->get_order_status_by_payment_status( $payment_status );

$this->manage_earnings_and_enrollments( $order_status, $order_id );
}
Expand Down Expand Up @@ -527,8 +537,12 @@ public function handle_free_checkout( array $order_data ) {
add_filter( 'tutor_enroll_data', fn( $enroll_data ) => array_merge( $enroll_data, array( 'post_status' => 'completed' ) ) );

$enrolled_id = EnrollmentModel::do_enroll( $item['item_id'], $order_data['id'], $user_id );
if ( $enrolled_id && tutor_utils()->is_addon_enabled( 'course-bundle' ) && get_post_type( $item['item_id'] ) === CourseBundle::POST_TYPE ) {
BundleModel::enroll_to_bundle_courses( $item['item_id'], $user_id );
if ( $enrolled_id ) {
do_action( 'tutor_order_enrolled', (object) $order_data, $enrolled_id );

if ( tutor_utils()->is_addon_enabled( 'course-bundle' ) && get_post_type( $item['item_id'] ) === CourseBundle::POST_TYPE ) {
BundleModel::enroll_to_bundle_courses( $item['item_id'], $user_id );
}
}
}

Expand Down
Loading