PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.4.2
Tutor LMS – eLearning and online course solution v3.4.2
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
349 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\Ecommerce\CartController;
12 use Tutor\Ecommerce\CheckoutController;
13 use Tutor\Ecommerce\Settings;
14 use Tutor\Ecommerce\Tax;
15 use TUTOR\Input;
16 use Tutor\Models\CouponModel;
17 use Tutor\Models\OrderModel;
18
19
20 $coupon_model = new CouponModel();
21 $cart_controller = new CartController( false );
22 $checkout_controller = new CheckoutController( false );
23 $get_cart = $cart_controller->get_cart_items();
24 $courses = $get_cart['courses'];
25 $total_count = $courses['total_count'];
26 $course_id = (int) Input::sanitize_request_data( 'course_id', 0 );
27 $course_list = Settings::is_buy_now_enabled() && $course_id ? array( get_post( $course_id ) ) : $courses['results'];
28
29 $plan_id = (int) Input::sanitize_request_data( 'plan' );
30 $plan_info = apply_filters( 'tutor_get_plan_info', new stdClass(), $plan_id );
31
32 // Contains Course/Bundle/Plan ids.
33 $object_ids = array();
34 $order_type = ( $plan_id && $plan_info )
35 ? OrderModel::TYPE_SUBSCRIPTION
36 : OrderModel::TYPE_SINGLE_ORDER;
37
38 $coupon_code = Input::sanitize_request_data( 'coupon_code', '' );
39 $has_manual_coupon_code = ! empty( $coupon_code );
40 $show_coupon_box = Settings::is_coupon_usage_enabled();
41
42 $is_tax_included_in_price = Tax::is_tax_included_in_price();
43 $tax_rate = Tax::get_user_tax_rate( get_current_user_id() );
44 ?>
45
46 <div class="tutor-checkout-details">
47 <?php
48 if ( Settings::is_buy_now_enabled() && $course_id && tutor_utils()->is_enrolled( $course_id, get_current_user_id() ) ) {
49 add_filter( 'tutor_checkout_enable_pay_now_btn', '__return_false' );
50 ?>
51 <div class="tutor-alert tutor-warning tutor-d-flex tutor-gap-1">
52 <span><?php esc_html_e( 'You\'re already enrolled in this course.', 'tutor' ); ?></span>
53 <a href="<?php echo esc_url( get_the_permalink( $course_id ) ); ?>"><?php esc_html_e( 'Start learning!', 'tutor' ); ?></a>
54 </div>
55 <?php
56 }
57
58 if ( ! Settings::is_buy_now_enabled() && count( $course_list ) ) {
59 $enrolled_courses = array();
60 foreach ( $course_list as $course ) {
61 if ( tutor_utils()->is_enrolled( $course->ID, get_current_user_id() ) ) {
62 $enrolled_courses[] = $course;
63 }
64 }
65
66 if ( count( $enrolled_courses ) ) {
67 add_filter( 'tutor_checkout_enable_pay_now_btn', '__return_false' );
68 ?>
69 <div class="tutor-alert tutor-warning">
70 <div>
71 <p class="tutor-mb-8">
72 <?php
73 if ( count( $enrolled_courses ) > 1 ) {
74 esc_html_e( 'You are already enrolled in the following courses. Please remove those from your cart and continue.', 'tutor' );
75 } else {
76 esc_html_e( 'You are already enrolled in the following course. Please remove that from your cart and continue.', 'tutor' );
77 }
78 ?>
79 <a class="tutor-text-decoration-none tutor-color-primary" href="<?php echo esc_url( $cart_controller->get_page_url() ); ?>"><?php esc_html_e( 'View Cart', 'tutor' ); ?></a>
80 </p>
81 <ul>
82 <?php foreach ( $enrolled_courses as $course ) : ?>
83 <li><a class="tutor-text-decoration-none tutor-color-primary" href="<?php echo esc_url( get_the_permalink( $course->ID ) ); ?>"><?php echo esc_html( $course->post_title ); ?></a></li>
84 <?php endforeach; ?>
85 </ul>
86 </div>
87 </div>
88 <?php
89 }
90 }
91 ?>
92 <div class="tutor-checkout-details-inner">
93 <h5 class="tutor-fs-5 tutor-fw-medium tutor-color-black tutor-border-bottom tutor-pb-8">
94 <?php esc_html_e( 'Order Details', 'tutor' ); ?>
95 </h5>
96 <div class="tutor-checkout-detail-item">
97 <div class="tutor-checkout-courses">
98 <?php
99 // Subscription plan checkout item.
100 if ( isset( $plan_info->plan_name, $plan_info->regular_price ) ) {
101 $checkout_data = $checkout_controller->prepare_checkout_items( $plan_info->id, $order_type, $coupon_code );
102 $enrollment_fee = floatval( $plan_info->enrollment_fee );
103 $show_coupon_box = $plan_info->in_sale_price ? false : true;
104
105 $plan_course_id = apply_filters( 'tutor_subscription_course_by_plan', $plan_id );
106 $plan_course = get_post( $plan_course_id );
107
108 /**
109 * Plan item details.
110 * User can purchase only one plan at a time.
111 */
112 $item = $checkout_data->items[0];
113
114 array_push( $object_ids, $plan_info->id );
115
116 $plan_url = get_the_permalink( $plan_course );
117 if ( $plan_info->is_membership_plan ) {
118 $plan_url = $plan_info->pricing_page_url;
119 }
120
121 $thumbnail_url = get_tutor_course_thumbnail_src( 'post-thumbnail', $plan_course_id );
122 $plan_title = $plan_info->is_membership_plan ? $plan_info->plan_name : $plan_course->post_title;
123
124 $badge_label = $item->item_name;
125 ?>
126 <div class="tutor-checkout-course-item">
127 <?php if ( ! $plan_info->is_membership_plan ) { ?>
128 <div class="tutor-checkout-course-plan-badge">
129 <?php echo esc_html( $badge_label ); ?>
130 </div>
131 <?php } ?>
132 <div class="tutor-checkout-course-content">
133 <div class="tutor-d-flex tutor-flex-column tutor-gap-1">
134 <div class="<?php echo esc_attr( $plan_info->is_membership_plan ? '' : 'tutor-checkout-course-thumb-title' ); ?>">
135 <?php if ( ! $plan_info->is_membership_plan ) { ?>
136 <img src="<?php echo esc_url( $thumbnail_url ); ?>" alt="<?php echo esc_attr( $plan_title ); ?>" />
137 <?php } ?>
138 <h6 class="tutor-checkout-course-title">
139 <a href="<?php echo esc_url( $plan_url ); ?>"> <?php echo esc_html( $plan_title ); ?></a>
140 </h6>
141 </div>
142 <?php if ( $item->is_coupon_applied ) : ?>
143 <div class="tutor-checkout-coupon-badge">
144 <i class="tutor-icon-tag" area-hidden="true"></i>
145 <span><?php echo esc_html( $checkout_data->coupon_title ); ?></span>
146 </div>
147 <?php endif; ?>
148 </div>
149
150 <div class="tutor-text-right">
151 <div class="tutor-fw-bold">
152 <?php tutor_print_formatted_price( $item->display_price ); ?>
153 </div>
154 <?php if ( $item->sale_price || $item->discount_price ) : ?>
155 <div class="tutor-checkout-discount-price">
156 <?php tutor_print_formatted_price( $item->regular_price ); ?>
157 </div>
158 <?php endif; ?>
159 <div class="tutor-fs-7 tutor-color-hints">
160 <?php
161 echo esc_html(
162 $plan_info->recurring_value > 1
163 ? sprintf(
164 /* translators: %s: value, %s: name */
165 __( '/%1$s %2$s', 'tutor' ),
166 $plan_info->recurring_value,
167 $plan_info->recurring_interval . ( $plan_info->recurring_value > 1 ? 's' : '' )
168 )
169 :
170 sprintf(
171 /* translators: %s: recurring interval */
172 __( '/%1$s', 'tutor' ),
173 $plan_info->recurring_interval . ( $plan_info->recurring_value > 1 ? 's' : '' )
174 )
175 );
176 ?>
177 </div>
178 </div>
179 </div>
180 <?php if ( $enrollment_fee > 0 ) : ?>
181 <div class="tutor-checkout-enrollment-fee">
182 <div class="tutor-fs-6 tutor-color-black">
183 <?php echo esc_html_e( 'Enrollment Fee', 'tutor' ); ?>
184 </div>
185 <div class="tutor-text-right">
186 <div class="tutor-fw-bold">
187 <?php tutor_print_formatted_price( $enrollment_fee ); ?>
188 </div>
189 </div>
190 </div>
191 <?php endif; ?>
192 </div>
193 <!-- end subscription plan checkout item -->
194 <?php
195 } else {
196 /**
197 * Course and bundle checkout items.
198 */
199 if ( is_array( $course_list ) && count( $course_list ) ) :
200 $course_ids = array_column( $course_list, 'ID' );
201 $checkout_data = $checkout_controller->prepare_checkout_items( $course_ids, $order_type, $coupon_code );
202 ?>
203 <?php
204 foreach ( $checkout_data->items as $item ) :
205 $course = get_post( $item->item_id );
206 $course_thumbnail = get_tutor_course_thumbnail_src( 'post-thumbnail', $course->ID );
207 array_push( $object_ids, $item->item_id );
208 ?>
209 <div class="tutor-checkout-course-item" data-course-id="<?php echo esc_attr( $item->item_id ); ?>">
210 <?php if ( tutor()->has_pro && 'course-bundle' === $course->post_type ) : ?>
211 <div class="tutor-checkout-course-bundle-badge">
212 <?php
213 $bundle_model = new \TutorPro\CourseBundle\Models\BundleModel();
214 $bundle_course_ids = $bundle_model::get_bundle_course_ids( $course->ID );
215 // translators: %d: Number of courses in the cart.
216 echo esc_html( sprintf( __( '%d Course bundle', 'tutor' ), count( $bundle_course_ids ) ) );
217 ?>
218 </div>
219 <?php endif; ?>
220 <div class="tutor-checkout-course-content">
221 <div class="tutor-d-flex tutor-flex-column tutor-gap-1">
222 <div class="tutor-checkout-course-thumb-title">
223 <img src="<?php echo esc_url( $course_thumbnail ); ?>" alt="<?php echo esc_attr( $course->post_title ); ?>" />
224 <h6 class="tutor-checkout-course-title">
225 <a href="<?php echo esc_url( get_the_permalink( $course ) ); ?>">
226 <?php echo esc_html( $course->post_title ); ?>
227 </a>
228 </h6>
229 </div>
230 <div class="tutor-checkout-coupon-badge <?php echo esc_attr( $item->is_coupon_applied ? '' : 'tutor-d-none' ); ?>">
231 <i class="tutor-icon-tag" area-hidden="true"></i>
232 <span><?php echo esc_html( $item->is_coupon_applied ? $checkout_data->coupon_title : '' ); ?></span>
233 </div>
234 </div>
235 <div class="tutor-text-right">
236 <div class="tutor-fw-bold">
237 <?php tutor_print_formatted_price( $item->display_price ); ?>
238 </div>
239 <?php if ( $item->sale_price || $item->discount_price ) : ?>
240 <div class="tutor-checkout-discount-price">
241 <?php tutor_print_formatted_price( $item->regular_price ); ?>
242 </div>
243 <?php endif; ?>
244 </div>
245 </div>
246 </div>
247 <?php endforeach; ?>
248 <?php else : ?>
249 <?php tutor_utils()->tutor_empty_state( tutor_utils()->not_found_text() ); ?>
250 <?php endif; ?>
251 <?php } ?>
252 </div>
253 </div>
254
255 <div class="tutor-checkout-detail-item tutor-checkout-summary">
256 <div class="tutor-checkout-summary-item">
257 <div class="tutor-fw-medium"><?php esc_html_e( 'Subtotal', 'tutor' ); ?></div>
258 <div class="tutor-fw-bold">
259 <?php tutor_print_formatted_price( $checkout_data->subtotal_price ); ?>
260 </div>
261 </div>
262
263 <?php if ( $checkout_data->sale_discount > 0 ) : ?>
264 <div class="tutor-checkout-summary-item">
265 <div><?php esc_html_e( 'Sale discount', 'tutor' ); ?></div>
266 <div class="tutor-fw-bold">
267 - <?php tutor_print_formatted_price( $checkout_data->sale_discount ); ?>
268 </div>
269 </div>
270 <?php endif ?>
271
272 <?php if ( $show_coupon_box && ! $checkout_data->is_coupon_applied ) : ?>
273 <div class="tutor-checkout-summary-item tutor-have-a-coupon">
274 <div><?php esc_html_e( 'Have a coupon?', 'tutor' ); ?></div>
275 <button type="button" id="tutor-toggle-coupon-button" class="tutor-btn tutor-btn-link">
276 <?php esc_html_e( 'Click here', 'tutor' ); ?>
277 </button>
278 </div>
279 <div class="tutor-apply-coupon-form tutor-d-none">
280 <input type="text" name="coupon_code"
281 <?php if ( 'manual' === $checkout_data->coupon_type && $checkout_data->is_coupon_applied ) : ?>
282 value="<?php echo esc_attr( $coupon_code ); ?>"
283 <?php endif; ?>
284 placeholder="<?php esc_html_e( 'Add coupon code', 'tutor' ); ?>">
285 <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>
286 </div>
287 <?php endif; ?>
288
289 <div class="tutor-checkout-summary-item tutor-checkout-coupon-wrapper <?php echo esc_attr( $checkout_data->is_coupon_applied ? '' : 'tutor-d-none' ); ?>">
290 <div class="tutor-checkout-coupon-badge tutor-has-delete-button">
291 <i class="tutor-icon-tag" area-hidden="true"></i>
292 <span><?php echo esc_html( $checkout_data->coupon_title ); ?></span>
293
294 <?php if ( 'manual' === $checkout_data->coupon_type && $checkout_data->is_coupon_applied ) : ?>
295 <button type="button" id="tutor-checkout-remove-coupon" class="tutor-btn">
296 <i class="tutor-icon-times" area-hidden="true"></i>
297 </button>
298 <?php endif; ?>
299 </div>
300 <div class="tutor-fw-bold tutor-discount-amount">-<?php tutor_print_formatted_price( $checkout_data->coupon_discount ); ?></div>
301 </div>
302
303 <?php
304 if ( Tax::is_tax_configured() && $tax_rate > 0 && ! $is_tax_included_in_price ) :
305 ?>
306 <div class="tutor-checkout-summary-item" data-tax-amount>
307 <div><?php esc_html_e( 'Tax', 'tutor' ); ?></div>
308 <div class="tutor-fw-bold"><?php tutor_print_formatted_price( $checkout_data->tax_amount ); ?></div>
309 </div>
310 <?php endif; ?>
311 </div>
312
313 <div class="tutor-pt-12 tutor-pb-20">
314 <div class="tutor-checkout-summary-item">
315 <div class="tutor-fw-medium"><?php esc_html_e( 'Grand Total', 'tutor' ); ?></div>
316 <div class="tutor-fs-5 tutor-fw-bold tutor-checkout-grand-total">
317 <?php tutor_print_formatted_price( $checkout_data->total_price ); ?>
318 </div>
319 </div>
320 <div class="tutor-checkout-summary-item">
321 <div></div>
322 <?php
323 if ( Tax::is_tax_configured() && $tax_rate > 0 && $is_tax_included_in_price ) :
324 ?>
325 <div class="tutor-fs-7 tutor-color-muted">
326 <?php
327 /* translators: %s: tax amount */
328 echo esc_html( sprintf( __( '(Incl. Tax %s)', 'tutor' ), tutor_get_formatted_price( $checkout_data->tax_amount ) ) );
329 ?>
330 </div>
331 <?php endif ?>
332 </div>
333
334 <?php if ( 'manual' === $checkout_data->coupon_type && $checkout_data->is_coupon_applied ) : ?>
335 <input type="hidden" name="coupon_code" value="<?php echo esc_attr( $coupon_code ); ?>">
336 <?php endif; ?>
337 <input type="hidden" name="object_ids" value="<?php echo esc_attr( implode( ',', $object_ids ) ); ?>">
338 <input type="hidden" name="order_type" value="<?php echo esc_attr( $order_type ); ?>">
339 </div>
340
341 <?php
342 $is_zero_price = empty( $checkout_data->total_price ) && OrderModel::TYPE_SINGLE_ORDER === $checkout_data->order_type;
343 $pay_now_btn_text = $is_zero_price ? __( 'Enroll Now', 'tutor' ) : __( 'Pay Now', 'tutor' );
344 $pay_now_btn_text = apply_filters( 'tutor_checkout_pay_now_btn_text', $pay_now_btn_text, $checkout_data );
345 ?>
346 <input type="hidden" id="pay_now_btn_text" value="<?php echo esc_attr( $pay_now_btn_text ); ?>">
347 </div>
348 </div>
349