PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 1.0.8
Tutor LMS – eLearning and online course solution v1.0.8
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 / classes / WooCommerce.php
tutor / classes Last commit date
Addons.php 7 years ago Admin.php 7 years ago Ajax.php 7 years ago Assets.php 7 years ago Course.php 7 years ago Gutenberg.php 7 years ago Instructor.php 7 years ago Instructors_List.php 7 years ago Lesson.php 7 years ago Options.php 7 years ago Post_types.php 7 years ago Q_and_A.php 7 years ago Question.php 7 years ago Question_Answers_List.php 7 years ago Quiz.php 7 years ago Quiz_Attempts_List.php 7 years ago Rewrite_Rules.php 7 years ago Shortcode.php 7 years ago Student.php 7 years ago Students_List.php 7 years ago Template.php 7 years ago Theme_Compatibility.php 7 years ago Tools.php 7 years ago TutorEDD.php 7 years ago Tutor_Base.php 7 years ago Tutor_List_Table.php 7 years ago User.php 7 years ago Utils.php 7 years ago Video_Stream.php 7 years ago WooCommerce.php 7 years ago init.php 7 years ago
WooCommerce.php
269 lines
1 <?php
2 /**
3 * Created by PhpStorm.
4 * User: mhshohel
5 * Date: 1/10/18
6 * Time: 3:01 PM
7 */
8
9 namespace TUTOR;
10
11 class WooCommerce extends Tutor_Base {
12
13 public function __construct() {
14 parent::__construct();
15
16 add_action('tutor_options_before_woocommerce', array($this, 'notice_before_option'));
17
18 //Add option settings
19 add_filter('tutor/options/attr', array($this, 'add_options'));
20
21 $course_sell = tutor_utils()->get_option('enable_course_sell_by_woocommerce');
22 if ( ! $course_sell){
23 return;
24 }
25
26 /**
27 * Is Course Purchasable
28 */
29 add_filter('is_course_purchasable', array($this, 'is_course_purchasable'), 10, 2);
30 add_filter('get_tutor_course_price', array($this, 'get_tutor_course_price'), 10, 2);
31 add_filter('tutor_course_sell_by', array($this, 'tutor_course_sell_by'));
32
33 add_filter('product_type_options', array($this, 'add_tutor_type_in_wc_product'));
34
35 add_action( 'add_meta_boxes', array($this, 'register_meta_box') );
36 add_action('save_post_'.$this->course_post_type, array($this, 'save_course_meta'));
37 add_action('save_post_product', array($this, 'save_wc_product_meta'));
38
39 add_action('tutor_course/single/before/enroll', 'wc_print_notices');
40
41 add_action('woocommerce_new_order_item', array($this, 'course_placing_order'), 10, 3);
42
43
44 /**
45 * Order Status Hook
46 *
47 * Remove course from active courses if an order is cancelled or refunded
48 */
49 add_action( 'woocommerce_order_status_changed', array( $this, 'enrolled_courses_status_change' ), 10, 3 );
50
51 }
52
53 public function notice_before_option(){
54 $has_wc = tutor_utils()->has_wc();
55 if ($has_wc){
56 return;
57 }
58
59 ob_start();
60 ?>
61 <div class="tutor-notice-warning">
62 <p>
63 <?php _e(' Seems like you don’t have WooCommerce plugin installed on your site. In order to use this functionality, you need to have the
64 WooCommerce plugin installed. Get back on this page after installing the plugin and enable the following feature to start selling
65 courses with Tutor.', 'tutor'); ?>
66 </p>
67 <p><?php _e('This notice will disappear after activating <strong>WooCommerce</strong>', 'tutor'); ?></p>
68 </div>
69 <?php
70 echo ob_get_clean();
71 }
72
73 public function is_course_purchasable($bool, $course_id){
74 if ( ! tutor_utils()->has_wc()){
75 return false;
76 }
77 /*
78 $course_sell = tutor_utils()->get_option('enable_course_sell_by_woocommerce');
79 if ( ! $course_sell){
80 return false;
81 }*/
82
83 $course_id = tutor_utils()->get_post_id($course_id);
84 $has_product_id = get_post_meta($course_id, '_tutor_course_product_id', true);
85 if ($has_product_id){
86 return true;
87 }
88 return false;
89 }
90
91 public function get_tutor_course_price($price, $course_id){
92
93 $product_id = tutor_utils()->get_course_product_id($course_id);
94 $product = wc_get_product( $product_id );
95
96 if ($product) {
97 ob_start();
98 ?>
99 <p class="price">
100 <?php echo $product->get_price_html(); ?>
101 </p>
102 <?php
103 return ob_get_clean();
104 }
105 return false;
106 }
107
108 public function tutor_course_sell_by(){
109 return 'woocommerce';
110 }
111
112 public function add_tutor_type_in_wc_product($types){
113 $types['tutor_product'] = array(
114 'id' => '_tutor_product',
115 'wrapper_class' => 'show_if_simple',
116 'label' => __( 'For Tutor', 'tutor' ),
117 'description' => __( 'This checkmark ensure that you will sell a specif course via this product.', 'tutor' ),
118 'default' => 'no',
119 );
120
121 return $types;
122 }
123
124 public function register_meta_box(){
125 add_meta_box( 'tutor-attach-product', __( 'Add Product', 'tutor' ), array($this, 'course_add_product_metabox'), $this->course_post_type, 'advanced', 'high' );
126 }
127
128 public function course_add_product_metabox(){
129 include tutor()->path.'views/metabox/course-add-product-metabox.php';
130 }
131
132 /**
133 * @param $post_ID
134 *
135 * Save course meta for attaching product
136 */
137 public function save_course_meta($post_ID){
138 $product_id = (int) tutor_utils()->avalue_dot('_tutor_course_product_id', $_POST);
139 if ($product_id){
140 update_post_meta($post_ID, '_tutor_course_product_id', $product_id);
141 //Mark product for woocommerce
142 update_post_meta($product_id, '_virtual', 'yes');
143 update_post_meta($product_id, '_tutor_product', 'yes');
144 }else{
145 delete_post_meta($post_ID, '_tutor_course_product_id');
146 }
147 }
148
149
150
151 public function save_wc_product_meta($post_ID){
152 $is_tutor_product = tutor_utils()->avalue_dot('_tutor_product', $_POST);
153 if ($is_tutor_product === 'on'){
154 update_post_meta($post_ID, '_tutor_product', 'yes');
155 }else{
156 delete_post_meta($post_ID, '_tutor_product');
157 }
158 }
159
160 /**
161 * Do something after course order place
162 */
163
164 public function course_placing_order( $item_id, $item, $order_id){
165 //$item = new \WC_Order_Item_Product($item);
166
167 $product_id = $item->get_product_id();
168 $if_has_course = tutor_utils()->product_belongs_with_course($product_id);
169
170 if ($if_has_course){
171 $course_id = $if_has_course->post_id;
172 tutor_utils()->do_enroll($course_id, $order_id);
173 }
174 }
175
176
177 /**
178 *
179 * Take enrolled course action based on order status change
180 */
181
182 public function enrolled_courses_status_change($order_id, $status_from, $status_to){
183 if ( ! tutor_utils()->is_tutor_order($order_id)){
184 return;
185 }
186 global $wpdb;
187
188 $enrolled_ids_with_course = $this->get_course_enrolled_ids_by_order_id($order_id);
189
190 if ($enrolled_ids_with_course){
191 $enrolled_ids = wp_list_pluck($enrolled_ids_with_course, 'enrolled_id');
192
193 if (is_array($enrolled_ids) && count($enrolled_ids)){
194 foreach ($enrolled_ids as $enrolled_id){
195 $wpdb->update( $wpdb->posts, array( 'post_status' => $status_to ), array( 'ID' => $enrolled_id ) );
196 }
197 }
198 }
199 }
200
201 /**
202 * @param $order_id
203 *
204 * @return array|bool
205 */
206 public function get_course_enrolled_ids_by_order_id($order_id){
207 global $wpdb;
208 //Getting all of courses ids within this order
209
210 $courses_ids = $wpdb->get_results("SELECT * FROM {$wpdb->postmeta} WHERE post_id = {$order_id} AND meta_key LIKE '_tutor_order_for_course_id_%' ");
211
212 if (is_array($courses_ids) && count($courses_ids)){
213 $course_enrolled_by_order = array();
214 foreach ($courses_ids as $courses_id){
215 $course_id = str_replace('_tutor_order_for_course_id_', '',$courses_id->meta_key);
216 //array(order_id => array('course_id' => $course_id, 'enrolled_id' => enrolled_id))
217 $course_enrolled_by_order[$courses_id->post_id] = array('course_id' => $course_id, 'enrolled_id' => $courses_id->meta_value);
218 }
219 return $course_enrolled_by_order;
220 }
221 return false;
222 }
223
224 /**
225 * Remove course
226 *
227 * TODO: right now it's unused
228 */
229 public function remove_active_course($order_id){
230 global $wpdb;
231 //Getting all of courses ids within this order
232
233 $courses_ids = $wpdb->get_results("SELECT * FROM {$wpdb->postmeta} WHERE post_id = {$order_id} meta_key LIKE '_tutor_order_for_course_id_%' ");
234 }
235
236
237 /**
238 * @param $attr
239 *
240 * @return mixed
241 *
242 * Add option for WooCommerce settings
243 */
244 public function add_options($attr){
245
246 $attr['woocommerce'] = array(
247 'label' => __( 'WooCommerce', 'tutor' ),
248
249 'sections' => array(
250 'general' => array(
251 'label' => __('General', 'tutor'),
252 'desc' => __('WooCommerce Settings', 'tutor'),
253 'fields' => array(
254 'enable_course_sell_by_woocommerce' => array(
255 'type' => 'checkbox',
256 'label' => __('Enable / Disable', 'tutor'),
257 'label_title' => __('Enable WooComerce to sell course', 'tutor'),
258 'desc' => __('By integrating WooCommerce, you can sell your course', 'tutor'),
259 ),
260 ),
261 ),
262 ),
263 );
264
265 return $attr;
266 }
267
268
269 }