/** * Remove active course when an order is refunded or cancelled * @param integer $order_id ID of order * @return void */ public function remove_active_course($order_id) { $order = new WC_Order($order_id); foreach ($order->get_items() as $item) { if (isset($item['variation_id']) && 0 < $item['variation_id']) { // If item has variation_id then its a variation of the product $item_id = $item['variation_id']; } else { // Than its real product set it's id to item_id $item_id = $item['product_id']; } if ($item_id > 0) { $user_id = get_post_meta($order_id, '_customer_user', true); if ($user_id) { // Get all courses for product $args = array('posts_per_page' => -1, 'post_type' => 'course', 'meta_query' => array(array('key' => '_course_woocommerce_product', 'value' => $item_id)), 'orderby' => 'menu_order date', 'order' => 'ASC', 'fields' => 'ids'); $course_ids = get_posts($args); if ($course_ids && count($course_ids) > 0) { foreach ($course_ids as $course_id) { // Remove all course user meta Sensei_Utils::sensei_remove_user_from_course($course_id, $user_id); } // End For Loop } // End If Statement } // End If Statement } // End If Statement } // End For Loop }
/** * Runs when an order is cancelled. * @since 1.2.0 * @access public * @param integer $order_id order ID * @return void */ public function sensei_woocommerce_cancel_order($order_id) { // Get order object $order = new WC_Order($order_id); // Run through each product ordered if (0 < sizeof($order->get_items())) { // Get order user $user_id = $order->__get('user_id'); foreach ($order->get_items() as $item) { $product_type = ''; if (isset($item['variation_id']) && 0 < $item['variation_id']) { $item_id = $item['variation_id']; $product_type = 'variation'; } else { $item_id = $item['product_id']; } // End If Statement $_product = $this->sensei_get_woocommerce_product_object($item_id, $product_type); // Get courses that use the WC product $courses = array(); $courses = $this->post_types->course->get_product_courses($item_id); // Loop and update those courses foreach ($courses as $course_item) { // Check and Remove course from courses user meta $dataset_changes = Sensei_Utils::sensei_remove_user_from_course($course_item->ID, $user_id); } // End For Loop } // End For Loop } // End If Statement }
/** * If customer has purchased the course, update Sensei to indicate that they are taking the course. * * @since 1.0.0 * @since 1.9.0 move to class Sensei_WC * * @param int $course_id (default: 0) * @param array/Object $order_user (default: array()) Specific user's data. * * @return bool|int */ public static function course_update($course_id = 0, $order_user = array()) { global $current_user; if (!isset($current_user) || !$current_user->ID > 0) { return false; } $data_update = false; // Get the product ID $wc_post_id = get_post_meta(intval($course_id), '_course_woocommerce_product', true); // Check if in the admin if (is_admin()) { $user_login = $order_user['user_login']; $user_email = $order_user['user_email']; $user_url = $order_user['user_url']; $user_id = $order_user['ID']; } else { $user_login = $current_user->user_login; $user_email = $current_user->user_email; $user_url = $current_user->user_url; $user_id = $current_user->ID; } // End If Statement // This doesn't appear to be purely WooCommerce related. Should it be in a separate function? $course_prerequisite_id = (int) get_post_meta($course_id, '_course_prerequisite', true); if (0 < absint($course_prerequisite_id)) { $prereq_course_complete = Sensei_Utils::user_completed_course($course_prerequisite_id, intval($user_id)); if (!$prereq_course_complete) { // Remove all course user meta return Sensei_Utils::sensei_remove_user_from_course($course_id, $user_id); } } $is_user_taking_course = Sensei_Utils::user_started_course(intval($course_id), intval($user_id)); if (!$is_user_taking_course) { if (Sensei_WC::is_woocommerce_active() && Sensei_WC::has_customer_bought_product($user_id, $wc_post_id) && 0 < $wc_post_id) { $activity_logged = Sensei_Utils::user_start_course(intval($user_id), intval($course_id)); $is_user_taking_course = false; if (true == $activity_logged) { $is_user_taking_course = true; } // End If Statement } // End If Statement } // end if is user taking course return $is_user_taking_course; }
public function remove_user_from_post() { // Parse POST data $data = sanitize_text_field($_POST['data']); $action_data = array(); parse_str($data, $action_data); // Security checks // ensure the current user may remove users from post // only teacher or admin can remove users // check the nonce, valid post $nonce = ''; if (isset($_POST['remove_user_from_post_nonce'])) { $nonce = esc_html($_POST['remove_user_from_post_nonce']); } $post = get_post(intval($action_data['post_id'])); // validate the user $may_remove_user = false; if (current_user_can('manage_sensei') || $post->post_author == get_current_user_id()) { $may_remove_user = true; } if (!wp_verify_nonce($nonce, 'remove_user_from_post_nonce') || !is_a($post, 'WP_Post') || !$may_remove_user) { die(''); } if ($action_data['user_id'] && $action_data['post_id'] && $action_data['post_type']) { $user_id = intval($action_data['user_id']); $post_id = intval($action_data['post_id']); $post_type = sanitize_text_field($action_data['post_type']); $user = get_userdata($user_id); switch ($post_type) { case 'course': $removed = Sensei_Utils::sensei_remove_user_from_course($post_id, $user_id); break; case 'lesson': $removed = Sensei_Utils::sensei_remove_user_from_lesson($post_id, $user_id); break; } if ($removed) { die('removed'); } } die(''); }