/**
  * Add points for purchase
  * 
  * Handles to add points for purchases
  *
  * @package Easy Digital Downloads - Points and Rewards
  * @since 1.0.0
  */
 public function edd_points_add_point_for_complete_purchase($payment_id)
 {
     global $edd_options, $current_user;
     //get payment data
     $paymentdata = edd_get_payment_meta($payment_id);
     $userdata = edd_get_payment_meta_user_info($payment_id);
     $user_id = isset($userdata['id']) && !empty($userdata['id']) ? $userdata['id'] : 0;
     //get discount towards points
     $gotdiscount = $this->model->edd_points_get_payment_discount($payment_id);
     //check user has redeemed points or not & user_id should not empty
     if (isset($gotdiscount) && !empty($gotdiscount) && !empty($user_id)) {
         //get discounte price from points
         $discountedpoints = $this->model->edd_points_calculate_points($gotdiscount);
         //update user points
         edd_points_minus_points_from_user($discountedpoints, $user_id);
         //points label
         $pointslable = $this->model->edd_points_get_points_label($discountedpoints);
         //record data logs for redeem for purchase
         $post_data = array('post_title' => sprintf(__('Redeem %s for purchase', 'eddpoints'), $pointslable), 'post_content' => sprintf(__('%s redeemed for purchasing download by redeeming the points and get discounts.', 'eddpoints'), $pointslable), 'post_author' => $user_id);
         //log meta array
         $log_meta = array('userpoint' => $discountedpoints, 'events' => 'redeemed_purchase', 'operation' => 'minus');
         //insert entry in log
         $this->logs->edd_points_insert_logs($post_data, $log_meta);
         // set order meta, regardless of whether any points were earned, just so we know the process took place
         update_post_meta($payment_id, '_edd_points_order_redeemed', $discountedpoints);
     }
     //end if to check points redeemed taken by buyer or not
     // get cartdata from older order
     $cartdata = edd_get_payment_meta_cart_details($payment_id);
     //get bought points for points downloads types
     $boughtpoints = $this->model->edd_points_get_bought_points($cartdata);
     //get cart points from cartdata and payment discount given to user
     $cartpoints = $this->model->edd_points_get_user_checkout_points($cartdata, $gotdiscount);
     //add bought points to cart points
     $cartpoints = !empty($boughtpoints) ? $cartpoints + $boughtpoints : $cartpoints;
     //check checkout points earned points or user id is not empty
     if (!empty($cartpoints) && !empty($user_id)) {
         //points label
         $pointslable = $this->model->edd_points_get_points_label($cartpoints);
         //get user points after subtracting the redemption points
         $userpoints = edd_points_get_user_points();
         $post_data = array('post_title' => sprintf(__('%s earned for purchasing the downloads.', 'eddpoints'), $pointslable), 'post_content' => sprintf(__('Get %s for purchasing the downloads.', 'eddpoints'), $pointslable), 'post_author' => $user_id);
         $log_meta = array('userpoint' => $cartpoints, 'events' => 'earned_purchase', 'operation' => 'add');
         //insert entry in log
         $this->logs->edd_points_insert_logs($post_data, $log_meta);
         //update user points
         edd_points_add_points_to_user($cartpoints, $user_id);
         // set order meta, regardless of whether any points were earned, just so we know the process took place
         update_post_meta($payment_id, '_edd_points_order_earned', $cartpoints);
     }
     //end if to check checkout points should not empty
 }
 /**
  * AJAX Call for adjust user points
  *
  * Handles to adjust user points using ajax
  *
  * @package Easy Digital Downloads - Points and Rewards
  * @since 1.0.0
  */
 public function edd_points_adjust_user_points()
 {
     if (isset($_POST['userid']) && !empty($_POST['userid']) && isset($_POST['points']) && !empty($_POST['points'])) {
         // Check user id and points are not empty
         $user_id = $_POST['userid'];
         $current_points = $_POST['points'];
         //check number contains minus sign or not
         if (strpos($current_points, '-') !== false) {
             $operation = 'minus';
             $current_points = str_replace('-', '', $current_points);
             // Update user points to user account
             edd_points_minus_points_from_user($current_points, $user_id);
         } else {
             $operation = 'add';
             $current_points = str_replace('+', '', $current_points);
             // Update user points to user account
             edd_points_add_points_to_user($current_points, $user_id);
         }
         // Get user points from user meta
         $ubalance = edd_points_get_user_points($user_id);
         if (isset($_POST['log']) && !empty($_POST['log']) && trim($_POST['log'], ' ') != '') {
             // Check log is not empty
             $post_data = array('post_title' => $_POST['log'], 'post_content' => $_POST['log'], 'post_author' => $user_id);
             $log_meta = array('userpoint' => abs($current_points), 'events' => 'manual', 'operation' => $operation);
             $this->logs->edd_points_insert_logs($post_data, $log_meta);
         }
         echo $ubalance;
     } else {
         echo 'error';
     }
     exit;
 }