| Server IP : 185.143.233.238 / Your IP : 185.215.232.195 Web Server : LiteSpeed System : Linux saman.shetabanhost.com 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64 User : behrakir ( 1361) PHP Version : 8.1.34 Disable Function : symlink,shell_exec,show_source,exec,popen,system,passthru,proc_open,proc_close,pcntl_exec,mail MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/behrakir/khanomam.com/wp-content/plugins/wp-score-gamification/app/classes/parts/ |
Upload File : |
<?php namespace Avans\parts;
use Avans\data;
use Avans\func;
use Avans\user;
use stdClass;
class referer{
private static $table = 'avans_log_refs';
public static function add_ref_log($type,$amount,$args){
if ($amount <= 0) {
return;
}
global $wpdb;
$table_log = $wpdb->prefix . self::$table;
$wpdb->insert(
$table_log,
array(
'ref_id' => $args->ref_id,
'user_id' => $args->user_id,
'type' => $type,
'amount' => $amount,
'order_id' =>$args->order_id,
'status' => $args->status,
'created_at' => current_time('mysql'),
)
);
}
public static function apply_commision_ref_order($log){
$status = false;
if($log['status'] == 'approve'){
return true;
}
if($log['type'] == "wc_wallet"){
$user_info = get_userdata($log['user_id']);
$user_name = $user_info->display_name;
$description = 'کمسیون خرید مشتری معرفی شده-'.$user_name;
$status = convert::wallet_transaction($log['ref_id'], $log['amount'], $description);
}
if ($log['type'] == "wc_score") {
$details = [
array(
'key' => 'order_id',
'value' => $log['order_id'],
),
array(
'key' => 'customer',
'value' => $log['user_id']
)
];
$temp_score = get_user_meta((int)$log['ref_id'],AVANS_PREFIX.'temp_max_score',true);
update_user_meta((int)$log['ref_id'],AVANS_PREFIX.'temp_max_score','');
$status = user::add_log((int)$log['ref_id'], 'wc_referer', $details, (int)$log['amount']);
update_user_meta((int)$log['ref_id'],AVANS_PREFIX.'temp_max_score',$temp_score);
}
if($status){
$status = self::update_status_log_ref($log['id']);
do_action('avans_after_applied_commision_referer',$log);
}
return $status;
}
public static function update_status_log_ref($log_id){
global $wpdb;
$tbl = $wpdb->prefix.self::$table;
$data = array('status'=>'approve');
$where = array('id'=> $log_id);
return $wpdb->update($tbl, $data, $where);
}
public static function get_log_order($order_id){
global $wpdb;
$tbl = $wpdb->prefix.self::$table;
$query = "SELECT * FROM {$tbl} WHERE order_id = %d";
$result = $wpdb->get_row($wpdb->prepare($query, $order_id));
return $result;
}
public static function check_fee($user_id,$cart,$refcode){
$settings = AVANS_SETTINGS['referer_settings']['referer'];
$subtotal = $cart->cart_contents_total;
$refcode = trim($refcode);
$user_ref_code = get_user_meta($user_id, AVANS_PREFIX.'user_ref_code', true);
$feetext = 'تخفیف بابت وارد کردن کد معرف';
$fee = self::calculate_fee($user_id,$settings,$subtotal);
if ( self::is_permision_for_use($settings,$user_id) ) {
if ( func::is_set($refcode) ) {
$users = user::find_by_ref($refcode);
if (count($users)!= 0 && $refcode != $user_ref_code) {
WC()->session->set(AVANS_PREFIX.'referal_code', $refcode);
}
}else{
if ( isset($_COOKIE['avans-referal-id']) && !empty($_COOKIE['avans-referal-id']) ) {
$users = user::find_by_ref($_COOKIE['avans-referal-id']);
$code_referal = trim($_COOKIE['avans-referal-id']);
if (count($users)!=0 && $code_referal != $user_ref_code) {
$code_referal = $_COOKIE['avans-referal-id'];
WC()->session->set(AVANS_PREFIX.'referal_code', $code_referal);
}else{
WC()->session->__unset(AVANS_PREFIX.'referal_code');
}
}else{
WC()->session->__unset(AVANS_PREFIX.'referal_code');
}
}
$code_referal = WC()->session->get(AVANS_PREFIX.'referal_code');
if ($fee > 0 && func::is_set($code_referal)) {
$cart->add_fee($feetext, -$fee);
}
}
}
public static function get_discount_refcode($user_id,$settings){
$level = user::get_level($user_id);
$role = user::get_role($user_id);
$normal = (int)$settings['fee'];
$role = (int)data::check_condition((array)$settings['condition-coupon'], 'role', $role);
$level = (int)data::check_condition((array)$settings['condition-coupon'], 'level', $level);
if (max($role, $level) > 0) {
return (int)max($role, $level);
}
return $normal;
}
public static function get_discount_commision($ref_id,$settings){
$level = user::get_level($ref_id);
$role = user::get_role($ref_id);
$normal = (int)$settings['ref_gift'];
$role = (int)data::check_condition((array)$settings['condition-commission'], 'role', $role);
$level = (int)data::check_condition((array)$settings['condition-commission'], 'level', $level);
if (max($role, $level) > 0) {
return (int)max($role, $level);
}
return $normal;
}
public static function calculate_fee($user_id,$settings,$subtotal){
$calc_discount = self::get_discount_refcode($user_id,$settings);
if ($settings['fee_type']=='percent') {
$discount = $calc_discount / 100;
$fee = $subtotal * $discount;
if (($subtotal * $discount) > $subtotal) {
$fee = $subtotal;
}
} else {
$fee = $calc_discount;
if ($calc_discount > $subtotal) {
$fee = $subtotal;
}
}
return $fee;
}
public static function is_permision_for_use($settings,$user_id){
$last_ref_code_used = get_user_meta($user_id, AVANS_PREFIX.'wc_ref_code', true);
if ( $settings['repeat'] != 'once' || empty($last_ref_code_used) ) {
return true;
}
return false;
}
public static function apply_referer_commission($order,$customer_id,$ref_code){
$refs = get_users(array('meta_key' => AVANS_PREFIX.'user_ref_code', 'meta_value' => $ref_code));
$settings = AVANS_SETTINGS['referer_settings']['referer'];
$details = [
array(
'key' => 'order_id',
'value' => $order->get_id()
),
array(
'key' => 'customer',
'value' => $customer_id
)
];
$sum_score = data::get_sum_score_for_purchase($customer_id,$order);
$price = data::get_total_order($order);
$args = new stdClass();
$args->user_id = $customer_id;
$args->order_id = $order->get_id();
$args->status = 'processing';
foreach ($refs as $ref) {
$ref_gift = self::get_discount_commision($ref->ID,$settings);
$args->ref_id = $ref->ID;
switch($settings['ref_gift_type']){
case 'percent-score':
if($sum_score > 0){
$score = $sum_score * ($ref_gift/100);
if ($args->status == 'approve') {
user::add_log($ref->ID, 'wc_referer', $details, (int)$score);
}
self::add_ref_log('wc_score',(int)$score,$args);
}
break;
case 'static-score':
if ($args->status == 'approve') {
user::add_log($ref->ID, 'wc_referer', $details, (int)$ref_gift);
}
self::add_ref_log('wc_score',(int)$ref_gift , $args);
break;
case 'percent-total-price':
$amount = $price * ($ref_gift/100);
$user_info = get_userdata($customer_id);
$user_name = $user_info->display_name;
$description = 'کمسیون خرید مشتری معرفی شده-'.$user_name;
if ($args->status == 'approve') {
convert::wallet_transaction($ref->ID, $amount, $description);
}
self::add_ref_log('wc_wallet',$amount, $args);
break;
do_action('avans_after_referer_code_used_in_order',$ref->ID,$customer_id,$order->get_id());
}
}
}
public static function get_order_referer_by_id($order_id){
$refcode = get_post_meta($order_id, AVANS_PREFIX.'wc_ref_order', true);
if(!empty($refcode)){
$users = user::find_by_ref($refcode);
if(count($users) > 0){
foreach($users as $user){
return get_user_by("ID" , $user->user_id);
}
}
}
return false;
}
public static function get_user_purchase_refs($user_id){
global $wpdb;
$tbl = $wpdb->prefix.self::$table;
$postmeta = $wpdb->postmeta;
$result = $wpdb->get_results("SELECT
COUNT(id) as count_order,sum(amount) as amount,sum(meta_value) as total,ref_id FROM $tbl
JOIN $postmeta ON $tbl.order_id = $postmeta.post_id
WHERE
meta_key = '_order_total' AND
status = 'approve' AND
user_id = $user_id
GROUP BY ref_id"
);
return $result;
}
}