PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.6.4
Tutor LMS – eLearning and online course solution v3.6.4
4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / templates / ecommerce / checkout-details.php
tutor / templates / ecommerce Last commit date
billing-form-fields.php 1 year ago billing.php 1 year ago cart.php 1 year ago checkout-details.php 1 year ago checkout.php 1 year ago order-placement-failed.php 1 year ago order-placement-success.php 1 year ago
checkout-details.php
225 lines
1 <?php
2 /**
3 * Checkout info template
4 *
5 * @package Tutor\Views
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 3.0.0
9 */
10
11 use TUTOR\Input;
12 use Tutor\Ecommerce\Tax;
13 use Tutor\Models\OrderModel;
14 use Tutor\Ecommerce\Settings;
15 use Tutor\Models\CouponModel;
16 use Tutor\Ecommerce\CartController;
17 use Tutor\Ecommerce\CheckoutController;
18
19 /**
20 * User ID is required.
21 * Renders this view only (excluding checkout.php) when the country or state changes via AJAX.
22 */
23 $user_id = apply_filters( 'tutor_checkout_user_id', get_current_user_id() );
24
25 $coupon_model = new CouponModel();
26 $cart_controller = new CartController( false );
27 $checkout_controller = new CheckoutController( false );
28 $get_cart = $cart_controller->get_cart_items();
29 $courses = $get_cart['courses'];
30 $total_count = $courses['total_count'];
31 $course_id = (int) Input::sanitize_request_data( 'course_id', 0 );
32 $course_list = Settings::is_buy_now_enabled() && $course_id ? array( get_post( $course_id ) ) : $courses['results'];
33
34 $plan_id = (int) Input::sanitize_request_data( 'plan' );
35 $plan_info = apply_filters( 'tutor_get_plan_info', null, $plan_id );
36 $has_plan_info = $plan_id && $plan_info;
37
38 // Contains Course/Bundle/Plan ids.
39 $object_ids = array();
40 $item_ids = $has_plan_info ? array( $plan_info->id ) : array_column( $course_list, 'ID' );
41 $order_type = $has_plan_info ? OrderModel::TYPE_SUBSCRIPTION : OrderModel::TYPE_SINGLE_ORDER;
42
43 $coupon_code = apply_filters( 'tutor_checkout_coupon_code', Input::sanitize_request_data( 'coupon_code', '' ), $order_type, $item_ids );
44 $has_manual_coupon_code = ! empty( $coupon_code );
45
46 $is_tax_included_in_price = Tax::is_tax_included_in_price();
47 $tax_rate = Tax::get_user_tax_rate( $user_id );
48
49 $checkout_data = $checkout_controller->prepare_checkout_items( $item_ids, $order_type, $coupon_code );
50 $show_coupon_box = Settings::is_coupon_usage_enabled() && ! $checkout_data->is_coupon_applied;
51 ?>
52
53 <div class="tutor-checkout-details">
54
55 <?php do_action( 'tutor_before_checkout_order_details', $course_list ); ?>
56
57 <div class="tutor-checkout-details-inner">
58 <h5 class="tutor-fs-5 tutor-fw-medium tutor-color-black tutor-border-bottom tutor-pb-8">
59 <?php esc_html_e( 'Order Details', 'tutor' ); ?>
60 </h5>
61 <div class="tutor-checkout-detail-item">
62 <div class="tutor-checkout-courses">
63 <?php
64 // Subscription plan checkout item.
65 if ( $plan_info ) {
66 $plan_item_template = apply_filters( 'tutor_checkout_plan_item_template', null, $plan_info );
67 if ( file_exists( $plan_item_template ) ) {
68 require $plan_item_template;
69 }
70 } else {
71 /**
72 * Course and bundle checkout items.
73 */
74 if ( is_array( $course_list ) && count( $course_list ) ) :
75 ?>
76 <?php
77 foreach ( $checkout_data->items as $item ) :
78 $course = get_post( $item->item_id );
79 $course_thumbnail = get_tutor_course_thumbnail_src( 'post-thumbnail', $course->ID );
80 array_push( $object_ids, $item->item_id );
81 ?>
82 <div class="tutor-checkout-course-item" data-course-id="<?php echo esc_attr( $item->item_id ); ?>">
83 <?php if ( tutor()->has_pro && 'course-bundle' === $course->post_type ) : ?>
84 <div class="tutor-checkout-course-bundle-badge">
85 <?php
86 $bundle_model = new \TutorPro\CourseBundle\Models\BundleModel();
87 $bundle_course_ids = $bundle_model::get_bundle_course_ids( $course->ID );
88 // translators: %d: Number of courses in the cart.
89 echo esc_html( sprintf( __( '%d Course bundle', 'tutor' ), count( $bundle_course_ids ) ) );
90 ?>
91 </div>
92 <?php endif; ?>
93 <div class="tutor-checkout-course-content">
94 <div class="tutor-d-flex tutor-flex-column tutor-gap-1">
95 <div class="tutor-checkout-course-thumb-title">
96 <img src="<?php echo esc_url( $course_thumbnail ); ?>" alt="<?php echo esc_attr( $course->post_title ); ?>" />
97 <h6 class="tutor-checkout-course-title">
98 <a href="<?php echo esc_url( get_the_permalink( $course ) ); ?>">
99 <?php echo esc_html( $course->post_title ); ?>
100 </a>
101 </h6>
102 </div>
103 <div class="tutor-checkout-coupon-badge <?php echo esc_attr( $item->is_coupon_applied ? '' : 'tutor-d-none' ); ?>">
104 <i class="tutor-icon-tag" area-hidden="true"></i>
105 <span><?php echo esc_html( $item->is_coupon_applied ? $checkout_data->coupon_title : '' ); ?></span>
106 </div>
107 </div>
108 <div class="tutor-text-right">
109 <div class="tutor-fw-bold">
110 <?php tutor_print_formatted_price( $item->display_price ); ?>
111 </div>
112 <?php if ( $item->sale_price || $item->discount_price ) : ?>
113 <div class="tutor-checkout-discount-price">
114 <?php tutor_print_formatted_price( $item->regular_price ); ?>
115 </div>
116 <?php endif; ?>
117 </div>
118 </div>
119 </div>
120 <?php endforeach; ?>
121 <?php else : ?>
122 <?php tutor_utils()->tutor_empty_state( tutor_utils()->not_found_text() ); ?>
123 <?php endif; ?>
124 <?php } ?>
125 </div>
126 </div>
127
128 <div class="tutor-checkout-detail-item tutor-checkout-summary">
129 <div class="tutor-checkout-summary-item">
130 <div class="tutor-fw-medium"><?php esc_html_e( 'Subtotal', 'tutor' ); ?></div>
131 <div class="tutor-fw-bold">
132 <?php tutor_print_formatted_price( $checkout_data->subtotal_price ); ?>
133 </div>
134 </div>
135
136 <?php if ( $checkout_data->sale_discount > 0 ) : ?>
137 <div class="tutor-checkout-summary-item">
138 <div>
139 <?php
140 $sale_discount_label = apply_filters( 'tutor_checkout_sale_discount_label', __( 'Sale discount', 'tutor' ) );
141 echo esc_html( $sale_discount_label );
142 ?>
143 </div>
144 <div class="tutor-fw-bold">
145 - <?php tutor_print_formatted_price( $checkout_data->sale_discount ); ?>
146 </div>
147 </div>
148 <?php endif ?>
149
150 <?php if ( $show_coupon_box ) : ?>
151 <div class="tutor-checkout-summary-item tutor-have-a-coupon">
152 <div><?php esc_html_e( 'Have a coupon?', 'tutor' ); ?></div>
153 <button type="button" id="tutor-toggle-coupon-button" class="tutor-btn tutor-btn-link">
154 <?php esc_html_e( 'Click here', 'tutor' ); ?>
155 </button>
156 </div>
157 <div class="tutor-apply-coupon-form tutor-d-none">
158 <input type="text" name="coupon_code"
159 <?php if ( 'manual' === $checkout_data->coupon_type && $checkout_data->is_coupon_applied ) : ?>
160 value="<?php echo esc_attr( $coupon_code ); ?>"
161 <?php endif; ?>
162 placeholder="<?php esc_html_e( 'Add coupon code', 'tutor' ); ?>">
163 <button type="button" id="tutor-apply-coupon-button" class="tutor-btn tutor-btn-secondary" data-object-ids="<?php echo esc_attr( implode( ',', $object_ids ) ); ?>"><?php esc_html_e( 'Apply', 'tutor' ); ?></button>
164 </div>
165 <?php endif; ?>
166
167 <div class="tutor-checkout-summary-item tutor-checkout-coupon-wrapper <?php echo esc_attr( $checkout_data->is_coupon_applied ? '' : 'tutor-d-none' ); ?>">
168 <div class="tutor-checkout-coupon-badge tutor-has-delete-button">
169 <i class="tutor-icon-tag" area-hidden="true"></i>
170 <span><?php echo esc_html( $checkout_data->coupon_title ); ?></span>
171
172 <?php if ( $checkout_data->is_coupon_applied ) : ?>
173 <button type="button" id="tutor-checkout-remove-coupon" class="tutor-btn">
174 <i class="tutor-icon-times" area-hidden="true"></i>
175 </button>
176 <?php endif; ?>
177 </div>
178 <div class="tutor-fw-bold tutor-discount-amount">-<?php tutor_print_formatted_price( $checkout_data->coupon_discount ); ?></div>
179 </div>
180
181 <?php if ( Tax::is_tax_configured() && $tax_rate > 0 && ! $is_tax_included_in_price ) : ?>
182 <div class="tutor-checkout-summary-item tutor-checkout-tax-amount">
183 <div><?php esc_html_e( 'Tax', 'tutor' ); ?></div>
184 <div class="tutor-fw-bold"><?php tutor_print_formatted_price( $checkout_data->tax_amount ); ?></div>
185 </div>
186 <?php endif; ?>
187 </div>
188
189 <div class="tutor-pt-12 tutor-pb-20">
190 <div class="tutor-checkout-summary-item">
191 <div class="tutor-fw-medium"><?php esc_html_e( 'Grand Total', 'tutor' ); ?></div>
192 <div class="tutor-fs-5 tutor-fw-bold tutor-checkout-grand-total">
193 <?php tutor_print_formatted_price( $checkout_data->total_price ); ?>
194 </div>
195 </div>
196 <div class="tutor-checkout-summary-item tutor-checkout-incl-tax-label">
197 <div></div>
198 <?php if ( Tax::is_tax_configured() && $tax_rate > 0 && $is_tax_included_in_price ) : ?>
199 <div class="tutor-fs-7 tutor-color-muted">
200 <?php
201 /* translators: %s: tax amount */
202 echo esc_html( sprintf( __( '(Incl. Tax %s)', 'tutor' ), tutor_get_formatted_price( $checkout_data->tax_amount ) ) );
203 ?>
204 </div>
205 <?php endif ?>
206 </div>
207
208 <input type="hidden" name="coupon_code" value="<?php echo esc_attr( $coupon_code ); ?>">
209 <input type="hidden" name="object_ids" value="<?php echo esc_attr( implode( ',', $object_ids ) ); ?>">
210 <input type="hidden" name="order_type" value="<?php echo esc_attr( $order_type ); ?>">
211 </div>
212
213 <?php
214 $is_zero_price = empty( $checkout_data->total_price ) && OrderModel::TYPE_SINGLE_ORDER === $checkout_data->order_type;
215 $pay_now_btn_text = $is_zero_price ? __( 'Enroll Now', 'tutor' ) : __( 'Pay Now', 'tutor' );
216 $pay_now_btn_text = apply_filters( 'tutor_checkout_pay_now_btn_text', $pay_now_btn_text, $checkout_data );
217 $show_payment_methods = apply_filters( 'tutor_checkout_show_payment_methods', ! $is_zero_price, $checkout_data );
218
219 $checkout_data->pay_now_btn_text = $pay_now_btn_text;
220 $checkout_data->payment_method_required = $show_payment_methods;
221 ?>
222 <input type="hidden" id="checkout_data" value="<?php echo esc_attr( wp_json_encode( $checkout_data ) ); ?>">
223 </div>
224 </div>
225