156 lines
4.4 KiB
PHP
156 lines
4.4 KiB
PHP
|
<?php
|
||
|
namespace Opencart\Catalog\Model\Checkout;
|
||
|
/**
|
||
|
* Class Cart
|
||
|
*
|
||
|
* @package Opencart\Catalog\Model\Checkout
|
||
|
*/
|
||
|
class Cart extends \Opencart\System\Engine\Model {
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getProducts(): array {
|
||
|
$this->load->model('tool/image');
|
||
|
$this->load->model('tool/upload');
|
||
|
|
||
|
// Products
|
||
|
$product_data = [];
|
||
|
|
||
|
$products = $this->cart->getProducts();
|
||
|
|
||
|
foreach ($products as $product) {
|
||
|
if ($product['image']) {
|
||
|
$image = $this->model_tool_image->resize(html_entity_decode($product['image'], ENT_QUOTES, 'UTF-8'), $this->config->get('config_image_cart_width'), $this->config->get('config_image_cart_height'));
|
||
|
} else {
|
||
|
$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_cart_width'), $this->config->get('config_image_cart_height'));
|
||
|
}
|
||
|
|
||
|
$option_data = [];
|
||
|
|
||
|
foreach ($product['option'] as $option) {
|
||
|
if ($option['type'] != 'file') {
|
||
|
$value = $option['value'];
|
||
|
} else {
|
||
|
$upload_info = $this->model_tool_upload->getUploadByCode($option['value']);
|
||
|
|
||
|
if ($upload_info) {
|
||
|
$value = $upload_info['name'];
|
||
|
} else {
|
||
|
$value = '';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$option_data[] = [
|
||
|
'product_option_id' => $option['product_option_id'],
|
||
|
'product_option_value_id' => $option['product_option_value_id'],
|
||
|
'option_id' => $option['option_id'],
|
||
|
'option_value_id' => $option['option_value_id'],
|
||
|
'name' => $option['name'],
|
||
|
'value' => $value,
|
||
|
'type' => $option['type']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
$product_total = 0;
|
||
|
|
||
|
foreach ($products as $product_2) {
|
||
|
if ($product_2['product_id'] == $product['product_id']) {
|
||
|
$product_total += $product_2['quantity'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($product['minimum'] > $product_total) {
|
||
|
$minimum = false;
|
||
|
} else {
|
||
|
$minimum = true;
|
||
|
}
|
||
|
|
||
|
$product_data[] = [
|
||
|
'cart_id' => $product['cart_id'],
|
||
|
'product_id' => $product['product_id'],
|
||
|
'master_id' => $product['master_id'],
|
||
|
'image' => $image,
|
||
|
'name' => $product['name'],
|
||
|
'model' => $product['model'],
|
||
|
'option' => $option_data,
|
||
|
'subscription' => $product['subscription'],
|
||
|
'download' => $product['download'],
|
||
|
'quantity' => $product['quantity'],
|
||
|
'stock' => $product['stock'],
|
||
|
'minimum' => $minimum,
|
||
|
'shipping' => $product['shipping'],
|
||
|
'subtract' => $product['subtract'],
|
||
|
'reward' => $product['reward'],
|
||
|
'tax_class_id' => $product['tax_class_id'],
|
||
|
'price' => $product['price'],
|
||
|
'total' => $product['total']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return $product_data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getVouchers(): array {
|
||
|
$voucher_data = [];
|
||
|
|
||
|
if (!empty($this->session->data['vouchers'])) {
|
||
|
foreach ($this->session->data['vouchers'] as $voucher) {
|
||
|
$voucher_data[] = [
|
||
|
'code' => $voucher['code'],
|
||
|
'description' => $voucher['description'],
|
||
|
'from_name' => $voucher['from_name'],
|
||
|
'from_email' => $voucher['from_email'],
|
||
|
'to_name' => $voucher['to_name'],
|
||
|
'to_email' => $voucher['to_email'],
|
||
|
'voucher_theme_id' => $voucher['voucher_theme_id'],
|
||
|
'message' => $voucher['message'],
|
||
|
'amount' => $voucher['amount']
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $voucher_data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $totals
|
||
|
* @param array $taxes
|
||
|
* @param int $total
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function getTotals(array &$totals, array &$taxes, int &$total): void {
|
||
|
$sort_order = [];
|
||
|
|
||
|
$this->load->model('setting/extension');
|
||
|
|
||
|
$results = $this->model_setting_extension->getExtensionsByType('total');
|
||
|
|
||
|
foreach ($results as $key => $value) {
|
||
|
$sort_order[$key] = $this->config->get('total_' . $value['code'] . '_sort_order');
|
||
|
}
|
||
|
|
||
|
array_multisort($sort_order, SORT_ASC, $results);
|
||
|
|
||
|
foreach ($results as $result) {
|
||
|
if ($this->config->get('total_' . $result['code'] . '_status')) {
|
||
|
$this->load->model('extension/' . $result['extension'] . '/total/' . $result['code']);
|
||
|
|
||
|
// __call magic method cannot pass-by-reference so we get PHP to call it as an anonymous function.
|
||
|
($this->{'model_extension_' . $result['extension'] . '_total_' . $result['code']}->getTotal)($totals, $taxes, $total);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$sort_order = [];
|
||
|
|
||
|
foreach ($totals as $key => $value) {
|
||
|
$sort_order[$key] = $value['sort_order'];
|
||
|
}
|
||
|
|
||
|
array_multisort($sort_order, SORT_ASC, $totals);
|
||
|
}
|
||
|
}
|