MOON
Server: Apache
System: Linux u18017238.onlinehome-server.com 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User: emblazeone (1003)
PHP: 7.3.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/emblazeone/www/master-template/frontend/models/Cart.php
<?php

namespace frontend\models;

use Yii;
use yii\base\Model;

class Cart extends Model{
    public static $inst;
    protected $cart;

    public $note;

    public $email;
    public $phone;
    public $subscribe;

    public $shipping_first_name;
    public $shipping_last_name;
    public $shipping_address;
    public $shipping_address1;
    public $shipping_country='US';
    public $shipping_state;


    public static function getInstance(){
        if(!self::$inst){
            self::$inst=new self;
        }
        return self::$inst;
    }

    public function rules()
    {
        return [
            [[
                'note','phone','email','subscribe',
                'shipping_first_name','shipping_last_name',
                'shipping_address','shipping_address1',
                'shipping_country', 'shipping_state'
            ],'safe'],
            [[
                'email','phone',
                'shipping_first_name','shipping_last_name',
                'shipping_address',
                'shipping_country', 'shipping_state'
            ],'required','on'=>'step1']
        ];
    }

    protected function __construct()
    {
        $this->cart=Yii::$app->session->get('cart', []);
    }

    public function addItem($product, $qty, $variant_1, $variant_2){
        if($product){
            $item=new CartItem();
            $item->load([
                'product_id'=>$product->id,
                'qty'=>$qty,
                'variant_1'=>$variant_1,
                'variant_2'=>$variant_2
            ],'');
            $this->cart[]=$item;
            Yii::$app->session->set('cart', $this->cart);
        }
    }

    public function removeItem($position){
        $this->cart=Yii::$app->session->get('cart', []);
        unset($this->cart[$position]);
        Yii::$app->session->set('cart', $this->cart);
    }

    public function changeQty($num, $qty){
        $this->cart=Yii::$app->session->get('cart', []);
        $this->cart[$num]->qty=$qty;
        Yii::$app->session->set('cart', $this->cart);
        return $this->cart[$num];
    }

    public function getCount(){
        return count($this->cart);
    }

    /* @return array of CartItem */

    public function getItems(){
        return $this->cart;
    }

    /* @return float */

    public function getPrice(){
        $total=0;
        foreach ($this->getItems() as $item){
            $total+=$item->subtotal;
        }

        return $total;
    }

    public function getDiscountPrice(){
        return 0;
    }

    public function getShippingPrice(){
        return 0.00;
    }

    public function getTotal(){
        $total=$this->getPrice();
        $total-=$this->getDiscountPrice();
        return $total;
    }

    public function clean(){
        Yii::$app->session->set('discount', false);
        Yii::$app->session->set('cart', []);
    }
}