403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.202
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/inetpub/wwwroot/OPENPOSFNB/wp-content/plugins/woocommerce-openpos/includes/api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/inetpub/wwwroot/OPENPOSFNB/wp-content/plugins/woocommerce-openpos/includes/api/Cart.php
<?php
if(!class_exists('OP_REST_API_Cart'))
{
    class OP_REST_API_Cart extends OP_REST_API{
        public function register_routes() {
            register_rest_route( $this->namespace, '/cart/carts', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'carts'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/generate-cart-number', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'generate_cart_number'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/load-cart', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'get_cart'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/shipping-method', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'get_shipping'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/shipping-cost', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'get_shipping_cost'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/discount', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'get_discount'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/check-coupon', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'check_coupon'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/current-cart', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'current_cart'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/save', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'save'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
            register_rest_route( $this->namespace, '/cart/delete', array(
                'methods' =>  WP_REST_Server::CREATABLE,
                'callback' => array($this,'delete_cart'),
                'permission_callback' => array($this,'permission_callback'),
                ) 
            );
        }
        public function carts(WP_REST_Request $request = null){
            $result = array(
                'code' =>'unknown_error',
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $register_id = isset($this->session_data['login_cashdrawer_id']) ? $this->session_data['login_cashdrawer_id'] : [];
                $warehouse_id = isset($this->session_data['login_warehouse_id']) ? $this->session_data['login_warehouse_id'] : [];
                
                if(!$register_id )
                {
                    throw new Exception(__('Register not found','openpos'));
                }
                $warehouse_meta_key = $this->warehouse_class->get_order_meta_key();
                $post_type = 'shop_order';

                $today = getdate();
                
                $args = array(
                    'date_query' => array(
                        array(
                            'year'  => $today['year'],
                            'month' => $today['mon'],
                            'day'   => $today['mday'],
                        ),
                    ),
                    'post_type' => $post_type,
                    'post_status' => 'auto-draft',
                    'meta_query' => array(
                        array(
                            'key' => $warehouse_meta_key,
                            'value' => $warehouse_id,
                            'compare' => '=',
                        )
                    ),
                    'posts_per_page' => -1
                );
                $args = apply_filters('op_draft_orders_query_args',$args);

                
                $query = new WP_Query($args);
                $orders = $query->get_posts();
                
            
                
                $carts = array();
                if(count($orders) > 0)
                {
                    foreach($orders as $_order)
                    {
                        $order_number = $_order->ID;
                        $cart_data = get_post_meta($order_number,'_op_cart_data');
                        if($cart_data && is_array($cart_data) && !empty($cart_data))
                        {
                            $cart= end($cart_data);
                            $cart['allow_delete'] = 'yes';
                            $carts[] = $cart;
                        }else{
                            continue;
                        }
                    }

                    
                    
                }else{
                    throw new Exception(__('No cart found','openpos'));
                }
                $result['response']['data'] = $carts;
                $result['code'] = 200;
                $result['response']['status'] = 1;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function get_cart(WP_REST_Request $request = null){
            $result = array(
                'code' =>'unknown_error',
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $order_number = $request->get_param('order_number');
                if(!$order_number)
                {
                    throw new Exception( __('Cart Not found','openpos') );
                }else{
                    if(!$this->core_class->enable_hpos())
                    {
                        $order_number = $this->order_class->get_order_id_from_number($order_number);
                    }
                }
            
                if(is_numeric($order_number))
                {
                    //cashier cart
                    $order = get_post((int)$order_number);
                    if(!$order)
                    {
                        throw new Exception( __('Cart Not found','openpos') );
                    }
                    $cart_data = get_post_meta($order->ID,'_op_cart_data');
                    if($cart_data && is_array($cart_data) && !empty($cart_data))
                    {
                        $result['response']['data'] = $cart_data[0];
                        $result['response']['status'] = 1;
                    }
                }else{
                    // online cart
                    $cart_type = 'website';
                    $result['cart_type'] = $cart_type;
                    $cart_data = $this->cart_class->getCartBySessionId($order_number);
                    if(!$cart_data || !is_array($cart_data) || empty($cart_data))
                    {
                        throw new Exception( __('Cart Not found','openpos')   );
                    }else{
                        $result['response']['data'] = $cart_data;
                        $result['response']['status'] = 1;
                    }
                }
                
                
                $result['code'] = 200;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function save(WP_REST_Request $request = null){
            $result = array(
                'code' =>'unknown_error',
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                
                $session_data = $this->session_data;
                $order_data =  json_decode($request->get_param( 'order' ),true);
                $login_warehouse_id = isset($session_data['login_warehouse_id']) ? $session_data['login_warehouse_id'] : 0;
                
                $order_parse_data = apply_filters('op_new_order_data',$order_data,$session_data);

                


                $order_number = isset($order_parse_data['order_number']) ? $order_parse_data['order_number'] : 0;
                $order_id = isset($order_parse_data['order_id']) ? $order_parse_data['order_id'] : 0;
                if(!$order_id && !$this->_enable_hpos)
                {
                    $order_id = $this->order_class->get_order_id_from_number($order_number);
                }

                do_action('op_add_draft_order_data_before',$order_parse_data,$session_data);

                $items = isset($order_parse_data['items']) ? $order_parse_data['items'] : array();
                if(empty($items))
                {
                    throw new Exception('Item not found.');
                }

                
                $order = get_post($order_id);
                if($order)
                {
                
                    do_action('op_add_draft_order_before',$order,$order_data,$session_data);
                    $warehouse_meta_key = $this->warehouse_class->get_order_meta_key();
                    
                    update_post_meta($order->ID,'_op_cart_data',$order_data);
                    update_post_meta($order->ID,$warehouse_meta_key,$login_warehouse_id);
                    
                    

                    do_action('op_add_draft_order_after',$order,$order_data);
                    $result['response']['data'] = array('id' => $order->ID);
                    $result['response']['status'] = 1;
                }else{

                    throw new  Exception(__('Cart Not Found', 'openpos'));
                }
                
                $result['code'] = 200;

            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function current_cart(WP_REST_Request $request = null){
            $result = array(
                'code' =>'unknown_error',
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $register_id = $request->get_param('register_id') ;
                if(!$register_id)
                {
                    $register = isset($this->session_data['register']) ? $this->session_data['register'] : [];
                    if(!isset($register['id']))
                    {
                        throw new Exception(__('Register not found','openpos'));
                    }
                    $register_id = $register['id'];
                }
                $cart_data = $this->cart_class->getPosCart($register_id);
                $result['response']['data'] = $cart_data;
                $result['response']['status'] = 1;
                $result['code'] = 200;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }

        public function generate_cart_number(WP_REST_Request $request = null){
            $result = array(
                'code' =>'unknown_error',
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $cart_data = $request->get_param('cart');
                $cart_number = isset($cart_data['cart_number']) ? $cart_data['cart_number'] : array();


                $session_data = $this->session_data;

                // lock order number
                $post_type = 'shop_order';
                $arg = array(
                    'post_type' => $post_type,
                    'post_status'   => 'auto-draft'
                );

                if(isset($cart_number['order_id']) && $cart_number['order_id'] )
                {
                    $post = get_post($cart_number['order_id']);
                    if($post && $post->post_status == 'auto-draft')
                    {
                        $arg['ID'] = $post->ID;
                    }
                }
            
                $next_order_id = wp_insert_post( $arg );
                update_post_meta($next_order_id,'_op_pos_session',$session_data['session']);
                $next_order_number = $next_order_id;

                if(!$next_order_number)
                {
                    $next_order_number = $next_order_id;
                }
                $order_number_info = array(
                    'order_id' => $next_order_id,
                    'order_number' => $next_order_number,
                    'order_number_formatted' => '#'.$next_order_number
                );
                $result['response']['data'] = apply_filters('op_get_next_cart_number_info',$order_number_info);
                $result['response']['status'] = 1;
                $result['code'] = 200;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function delete_cart(WP_REST_Request $request = null){
            $result = array(
                'code' =>'unknown_error',
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $cart_data = json_decode($request->get_param('cart'),true);
                
                $order_number = isset($cart_data['order_number']) ? trim($cart_data['order_number'],'#') : 0;
                $order_id = isset($cart_data['order_id']) ? $cart_data['order_id'] : 0;
                if(!$order_number)
                {
                    $order_number = $order_id;
                }
                
                if(!$order_number)
                {

                    throw new Exception('Cart Not found');
                }else{
                    if(!$this->_enable_hpos)
                    {
                        //$order_number = $this->order_class->get_order_id_from_number($order_number);
                    }
                }
                if(is_numeric($order_number) && get_post_status($order_number) == 'auto-draft')
                {
                    do_action('delete_cart_before',$order_number,$cart_data);
                    wp_trash_post( $order_number );
                }
                $result['code'] = 200;
                $result['response']['status'] = 1;
                $result['response']['data'] = $order_number;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function get_shipping($request){
            $result = array(
                'code' => 200,
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $session_data = $this->session_data;
                $by_data = json_decode($request->get_param('by_data'),true);
    
                $cart = json_decode($request->get_param('cart'),true);
    
    
                $result['response']['status'] = 1;
                $result['response']['data'] = $this->cart_class->getShippingMethod($by_data,$cart,true);
    
                do_action('op_get_online_shipping_method',$result,$session_data);
                $result['response'] = apply_filters('op_get_online_shipping_method_response',$result['response'],$session_data);
                $result['code'] = 200;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function get_shipping_cost($request){
            $result = array(
                'code' => 200,
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $session_data = $this->session_data;
                $by_data = json_decode($request->get_param('by_data'),true);
    
                $cart = json_decode($request->get_param('cart'),true);

                $method = $by_data['shipping_method'] ? $by_data['shipping_method'] :'';
                $calc_shipping_cost = 0;
                $result['response']['data']['calc_shipping_cost'] = $calc_shipping_cost;
                $result['response']['data']['calc_shipping_tax'] = 0;
                $result['response']['data']['calc_shipping_rate_id'] = '';
                if($method)
                {
                    $result['response']['status'] = 1;
                    $cost = $this->cart_class->getShippingCost($by_data,$cart,true);
                    if(!empty($cost))
                    {
                        $result['response']['data']['calc_shipping_cost'] = $cost['cost'];
                        $result['response']['data']['calc_shipping_tax'] = $cost['tax'];
                        $result['response']['data']['calc_shipping_rate_id'] = $cost['rate_id'];
                    }
                }
                do_action('op_get_online_shipping_cost',$result['response'],$session_data);
                $result['response'] = apply_filters('op_get_online_shipping_cost_response',$result['response'],$session_data);
                $result['code'] = 200;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function get_discount($request){
            $result = array(
                'code' => 200,
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $session_data = $this->session_data;
                $cart = json_decode($request->get_param('cart'),true);

                $calc_shipping_cost = 0;
                $result['response']['data']['discount_amount'] = $calc_shipping_cost;
                $result['response']['data']['discount_type'] = 'fixed'; // fixed , percent
    
                $result['response']['status'] = 1;
                $cost = $this->cart_class->getCartDiscount($cart,true);
                if(!empty($cost))
                {
                    $result['response']['data']['discount_amount'] = $cost['discount_amount'];
                    $result['response']['data']['discount_type'] = $cost['discount_type'];
                }
    
                do_action('op_get_online_discount',$result['response'],$session_data);
                $result['response'] = apply_filters('op_get_online_shipping_cost_response',$result['response'],$session_data);
                $result['code'] = 200;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        public function check_coupon($request){
            $result = array(
                'code' => 200,
                'response' => array(
                    'status' => 0,
                    'data' => array(),
                    'message' => ''
                ),
                'api_message' => ''
            );
            try{
                $session_data = $this->session_data;
               
                if(class_exists('OP_Discounts'))
                {
                    $wc_discount = new OP_Discounts();
                    $code = trim($request->get_param('code'));
                    $cart_data = json_decode($request->get_param('cart'),true);
                    $coupon = new WC_Coupon($code);
                    
                    $applied_coupons = isset($request['applied_codes']) ? json_decode($request['applied_codes'],true) : array();

                    if(!empty($applied_coupons)){
                        
                        foreach($applied_coupons as $_a)
                        {
                            $a_coupon = new WC_Coupon($_a['code']);
                            if($a_coupon->get_individual_use())
                            {
                                throw new Exception(sprintf(__('Coupon %s is invidual use','openpos'),$_a['code']));
                            }
                        }
                        
                        
                    }

                    $items = array();
                    $_pf = new WC_Product_Factory();

                    

                    $grand_total = 0;
                    if(!$grand_total)
                    {
                        $grand_total = $cart_data['tax_amount'] + $cart_data['sub_total'] - $cart_data['discount_amount'] + $cart_data['shipping_cost'];
                    }


                    $item_discount_ids = array(); 
                    $is_after_tax = false;
                    if($this->setting_class->get_option('pos_cart_discount','openpos_general') == 'after_tax')
                    {
                        $is_after_tax = true;
                    }
                    
                    $discount_is_after_tax = apply_filters('op_check_coupon_request',$is_after_tax);
                    foreach ( $cart_data['items'] as $key => $cart_item ) {
                        $item                = new stdClass();
                        $item->key           = $key;
                        $item->object        = $cart_item;
                        $item->product       = $_pf->get_product($cart_item['product']['id']);
                        $item->quantity      = $cart_item['qty'];
                        if($discount_is_after_tax)
                        {
                            $item->price         = wc_add_number_precision_deep( $cart_item['total_incl_tax']  );
                        }else{
                            $item->price         = wc_add_number_precision_deep( $cart_item['total']  );
                        }
                        
                        $items[ $key ] = $item;
                    }

                    $wc_discount->set_items($items);
                    $valid = $wc_discount->is_coupon_valid($coupon,$cart_data);
                    
                    $after_items = $wc_discount->get_items();
                    foreach($after_items as $_i)
                    {
                        $item_obj = $_i->object;
                        $item_discount_ids[$_i->key] =  $item_obj['id'];
                    }
                    
                    if($valid === true)
                    {
                        
                        $result['valid'] = $valid;

                        
                        
                        $discount_type = $coupon->get_discount_type();

                        $amount = $wc_discount->apply_coupon($coupon);
                        $amount = wc_round_discount($amount/pow(10 , wc_get_price_decimals()),wc_get_price_decimals());



                        if($amount > $grand_total)
                        {
                            $amount = $grand_total;
                        }

                        if($amount < 0)
                        {
                            $msg = __('Coupon code has been expired','openpos');
                            throw new Exception($msg );
                        }
                        $code = $coupon->get_code();
                        $discount_amount_type = 'fixed';
                        if($discount_type == 'percent'){
                            $discount_amount_type = 'percent';
                        }
                        if($discount_type == 'fixed_product'){
                            $discount_amount_type = 'fixed_product';
                        }
                        $result['response']['amount'] = $amount;
                        $result['response']['data']['code'] = $code;
                        $result['response']['data']['base_amount'] = $coupon->get_amount();
                        $result['response']['data']['amount'] = $amount; // amount calculate base on cart
                        $result['response']['data']['tax_amount'] = 0;
                        $result['response']['data']['applied_items'] = array();
                        $result['response']['data']['discount_type'] = $discount_type;
                        $result['response']['data']['discount_amount'] = $coupon->get_amount();
                        $result['response']['data']['description'] = $coupon->get_description();
                        $result['response']['data']['discount_amount_type'] = $discount_amount_type;

                        $applied_items = $wc_discount->get_discounts();
                        $has_zero = false;
                        foreach($applied_items[$code] as $k => $_amount)
                        {
                            $id = $item_discount_ids[$k];
                            if($id)
                            {
                                $result['response']['data']['applied_items'][$id] = 1 * $_amount;
                                if($_amount == 0)
                                {
                                    $has_zero = true;
                                }
                            }
                            
                        }
                        if($has_zero)
                        {
                            $result['response']['data']['discount_type'] = 'fixed';
                            $result['response']['data']['discount_amount_type'] = 'fixed';
                            $result['response']['data']['discount_amount'] = $amount;
                            $string_amnt = wc_price($amount);
                        }else{
                            $string_amnt = wc_price($coupon->get_amount());

                            if($discount_type == 'percent')
                            {
                                $string_amnt = number_format($coupon->get_amount()).'%';
                            }
                        }
                    
                        $result['response']['message'] = sprintf(__("<b>%s</b> discount value: <b>%s</b>", 'openpos'), $code,$string_amnt);
                        $result['response']['status'] = 1;

                    }else{
                        $msg = $valid->get_error_message();

                        throw new Exception($msg );

                    }
                    do_action('op_check_coupon_after',$result);
                }
                $result['code'] = 200;
            }catch(Exception $e)
            {
                $result['code'] = 400;
                $result['response']['status'] = 0;
                $result['response']['message'] = $e->getMessage();
                
            }
            return $this->rest_ensure_response($result);
        }
        
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit