Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/tutor/ecommerce/CartController.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
/**
3
+
* Manage Cart
4
+
*
5
+
* @package Tutor\Ecommerce
6
+
* @author Themeum
7
+
* @link https://themeum.com
8
+
* @since 3.0.0
9
+
*/
10
+
11
+
namespace Tutor\Ecommerce;
12
+
13
+
use TUTOR\Course;
14
+
use Tutor\Helpers\HttpHelper;
15
+
use TUTOR\Input;
16
+
use Tutor\Models\CartModel;
17
+
use Tutor\Traits\JsonResponse;
18
+
19
+
if ( ! defined( 'ABSPATH' ) ) {
20
+
exit;
21
+
}
22
+
23
+
/**
24
+
* CartController class
25
+
*
26
+
* @since 3.0.0
27
+
*/
28
+
class CartController {
29
+
30
+
/**
31
+
* Page slug for cart page
32
+
*
33
+
* @since 3.0.0
34
+
*
35
+
* @var string
36
+
*/
37
+
public const PAGE_SLUG = 'cart';
38
+
39
+
/**
40
+
* Page slug for cart page
41
+
*
42
+
* @since 3.0.0
43
+
*
44
+
* @var string
45
+
*/
46
+
public const PAGE_ID_OPTION_NAME = 'tutor_cart_page_id';
47
+
48
+
/**
49
+
* Cart model
50
+
*
51
+
* @since 3.0.0
52
+
*
53
+
* @var CartModel
54
+
*/
55
+
private $model;
56
+
57
+
/**
58
+
* Trait for sending JSON response
59
+
*/
60
+
use JsonResponse;
61
+
62
+
/**
63
+
* Constructor.
64
+
*
65
+
* Initializes the Cart class, sets the page title, and optionally registers
66
+
* hooks for handling AJAX requests related to cart data, bulk actions, cart updates,
67
+
* and cart deletions.
68
+
*
69
+
* @param bool $register_hooks Whether to register hooks for handling requests. Default is true.
70
+
*
71
+
* @since 3.0.0
72
+
*
73
+
* @return void
74
+
*/
75
+
public function __construct( $register_hooks = true ) {
76
+
$this->model = new CartModel();
77
+
78
+
if ( $register_hooks ) {
79
+
/**
80
+
* Handle AJAX request for adding course to cart
81
+
*
82
+
* @since 3.0.0
83
+
*/
84
+
add_action( 'wp_ajax_tutor_add_course_to_cart', array( $this, 'add_course_to_cart' ) );
85
+
86
+
/**
87
+
* Handle AJAX request for deleting course from cart
88
+
*
89
+
* @since 3.0.0
90
+
*/
91
+
add_action( 'wp_ajax_tutor_delete_course_from_cart', array( $this, 'delete_course_from_cart' ) );
92
+
93
+
add_filter( 'tutor_course_loop_add_to_cart_button', array( $this, 'restrict_add_to_cart_course_list' ), 10, 2 );
94
+
}
95
+
}
96
+
97
+
/**
98
+
* Replace add to cart with buy now button on course list.
99
+
*
100
+
* @since 3.4.0
101
+
*
102
+
* @param string $add_to_cart_btn the button content.
103
+
* @param int $course_id the course id.
104
+
*
105
+
* @return string
106
+
*/
107
+
public function restrict_add_to_cart_course_list( $add_to_cart_btn, $course_id ) {
108
+
109
+
$selling_option = Course::get_selling_option( $course_id );
110
+
$btn_class = apply_filters( 'tutor_enroll_required_login_class', ! is_user_logged_in() ? 'tutor-open-login-modal' : '' );
111
+
112
+
if ( in_array( $selling_option, array( Course::SELLING_OPTION_BOTH, Course::SELLING_OPTION_SUBSCRIPTION, Course::SELLING_OPTION_MEMBERSHIP ), true ) ) {
113
+
return $add_to_cart_btn;
114
+
}
115
+
116
+
if ( Settings::is_buy_now_enabled() ) {
117
+
$checkout_page_url = add_query_arg( array( 'course_id' => $course_id ), CheckoutController::get_page_url() );
118
+
ob_start();
119
+
?>
120
+
<a href="<?php echo esc_url( $checkout_page_url ); ?>" class="tutor-btn tutor-course-list-btn tutor-btn-outline-primary tutor-btn-block <?php echo esc_attr( $btn_class ); ?>">
121
+
<?php esc_html_e( 'Buy Now', 'tutor' ); ?>
122
+
</a>
123
+
<?php
124
+
125
+
$add_to_cart_btn = ob_get_clean();
126
+
}
127
+
128
+
return $add_to_cart_btn;
129
+
}
130
+
131
+
/**
132
+
* Create cart page
133
+
*
134
+
* @since 3.0.0
135
+
*
136
+
* @return void
137
+
*/
138
+
public static function create_cart_page() {
139
+
$page_id = self::get_page_id();
140
+
if ( ! $page_id ) {
141
+
$args = array(
142
+
'post_title' => ucfirst( self::PAGE_SLUG ),
143
+
'post_content' => '',
144
+
'post_type' => 'page',
145
+
'post_status' => 'publish',
146
+
);
147
+
148
+
$page_id = wp_insert_post( $args );
149
+
tutor_utils()->update_option( self::PAGE_ID_OPTION_NAME, $page_id );
150
+
}
151
+
}
152
+
153
+
/**
154
+
* Get cart page url
155
+
*
156
+
* @since 3.0.0
157
+
*
158
+
* @return string
159
+
*/
160
+
public static function get_page_url() {
161
+
return get_post_permalink( self::get_page_id() );
162
+
}
163
+
164
+
/**
165
+
* Get cart page ID
166
+
*
167
+
* @since 3.0.0
168
+
*
169
+
* @return string
170
+
*/
171
+
public static function get_page_id() {
172
+
return (int) tutor_utils()->get_option( self::PAGE_ID_OPTION_NAME );
173
+
}
174
+
175
+
/**
176
+
* Get cart items
177
+
*
178
+
* @since 3.0.0
179
+
*
180
+
* @return array
181
+
*/
182
+
public function get_cart_items() {
183
+
$user_id = tutils()->get_user_id();
184
+
return apply_filters( 'tutor_cart_items', $this->model->get_cart_items( $user_id ), $user_id );
185
+
}
186
+
187
+
/**
188
+
* Get cart count.
189
+
*
190
+
* @since 3.0.0
191
+
*
192
+
* @param int $user_id logged in user_id.
193
+
*
194
+
* @return int
195
+
*/
196
+
public function get_user_cart_item_count( $user_id = 0 ) {
197
+
if ( ! $user_id ) {
198
+
$user_id = tutils()->get_user_id();
199
+
}
200
+
$cart_items = $this->model->get_cart_items( $user_id );
201
+
$cart_count = $cart_items['courses']['total_count'];
202
+
return $cart_count;
203
+
}
204
+
205
+
/**
206
+
* Add course to cart
207
+
*
208
+
* @since 3.0.0
209
+
*
210
+
* @return void JSON response
211
+
*/
212
+
public function add_course_to_cart() {
213
+
if ( ! tutor_utils()->is_nonce_verified() ) {
214
+
$this->json_response(
215
+
tutor_utils()->error_message( 'nonce' ),
216
+
null,
217
+
HttpHelper::STATUS_BAD_REQUEST
218
+
);
219
+
}
220
+
221
+
$user_id = tutils()->get_user_id();
222
+
$course_id = Input::post( 'course_id', 0, Input::TYPE_INT );
223
+
224
+
if ( ! $course_id ) {
225
+
$this->json_response(
226
+
__( 'Invalid course id.', 'tutor' ),
227
+
null,
228
+
HttpHelper::STATUS_BAD_REQUEST
229
+
);
230
+
}
231
+
232
+
// Check if the course already exists in the cart or not.
233
+
$is_course_in_user_cart = $this->model->is_course_in_user_cart( $user_id, $course_id );
234
+
if ( $is_course_in_user_cart ) {
235
+
$this->json_response(
236
+
__( 'The course is already in the cart.', 'tutor' ),
237
+
null,
238
+
HttpHelper::STATUS_BAD_REQUEST
239
+
);
240
+
}
241
+
242
+
$response = $this->model->add_course_to_cart( $user_id, $course_id );
243
+
244
+
if ( $response ) {
245
+
$this->json_response(
246
+
__( 'The course was added to the cart successfully.', 'tutor' ),
247
+
array(
248
+
'cart_page_url' => self::get_page_url(),
249
+
'cart_count' => self::get_user_cart_item_count( $user_id ),
250
+
),
251
+
HttpHelper::STATUS_CREATED
252
+
);
253
+
} else {
254
+
$this->json_response(
255
+
__( 'Failed to add to cart.', 'tutor' ),
256
+
null,
257
+
HttpHelper::STATUS_BAD_REQUEST
258
+
);
259
+
}
260
+
}
261
+
262
+
/**
263
+
* Delete course from cart
264
+
*
265
+
* @since 3.0.0
266
+
*
267
+
* @return void JSON response
268
+
*/
269
+
public function delete_course_from_cart() {
270
+
if ( ! tutor_utils()->is_nonce_verified() ) {
271
+
$this->json_response(
272
+
tutor_utils()->error_message( 'nonce' ),
273
+
null,
274
+
HttpHelper::STATUS_BAD_REQUEST
275
+
);
276
+
}
277
+
278
+
$user_id = tutils()->get_user_id();
279
+
$course_id = Input::post( 'course_id', 0, Input::TYPE_INT );
280
+
281
+
if ( ! $course_id ) {
282
+
$this->json_response(
283
+
__( 'Invalid course id.', 'tutor' ),
284
+
null,
285
+
HttpHelper::STATUS_BAD_REQUEST
286
+
);
287
+
}
288
+
289
+
$response = $this->model->delete_course_from_cart( $user_id, $course_id );
290
+
291
+
if ( $response ) {
292
+
ob_start();
293
+
tutor_load_template( 'ecommerce.cart' );
294
+
$cart_template = ob_get_clean();
295
+
$data = array(
296
+
'cart_template' => $cart_template,
297
+
'cart_count' => self::get_user_cart_item_count( $user_id ),
298
+
);
299
+
$this->json_response(
300
+
__( 'The course was removed successfully.', 'tutor' ),
301
+
$data,
302
+
HttpHelper::STATUS_OK
303
+
);
304
+
} else {
305
+
$this->json_response(
306
+
__( 'Course remove failed.', 'tutor' ),
307
+
null,
308
+
HttpHelper::STATUS_BAD_REQUEST
309
+
);
310
+
}
311
+
}
312
+
}
313
+