Exemplo n.º 1
0
 /**
  * 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
 }
Exemplo n.º 2
0
 /**
  * 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
 }
Exemplo n.º 3
0
 /**
  * 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('');
 }