Files
AtomicOld/view/CartView.php
2026-02-14 19:34:54 +03:00

311 lines
11 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?PHP
/**
* Simpla CMS
*
* @copyright 2009 Denis Pikusov
* @link http://simp.la
* @author Denis Pikusov
*
* Корзина покупок
* Этот класс использует шаблон cart.tpl
*
*/
require_once('View.php');
include $_SERVER['DOCUMENT_ROOT'] . '/modal-form/cp.php';
class CartView extends View
{
//////////////////////////////////////////
// Изменения товаров в корзине
//////////////////////////////////////////
public function __construct()
{
parent::__construct();
if($this->request->get('clear')=='true')
{
$this->cart->empty_cart();
header('location: '.$this->config->root_url.'/cart/');
}
// Если передан id варианта, добавим его в корзину
if($variant_id = $this->request->get('variant', 'integer'))
{
$this->cart->add_item($variant_id, $this->request->get('amount', 'integer'),$this->request->post('feature'));
header('location: '.$this->config->root_url.'/cart/');
}
// Удаление товара из корзины
if($delete_variant_id = intval($this->request->get('delete_variant')))
{
$this->cart->delete_item($delete_variant_id);
if(!isset($_POST['submit_order']) || $_POST['submit_order']!=1)
header('location: '.$this->config->root_url.'/cart/');
}
//print_r($_POST);die;
// Если нажали оформить заказ
if(isset($_POST['checkout']) || isset($_POST['cart-form']))
{
if(strpos($this->request->post('name'), '<?') !== false || strpos($this->request->post('name2'), '<?') !== false
|| strpos($this->request->post('email'), '<?') !== false || strpos($this->request->post('comment'), '<?') !== false) die('503');
$order->delivery_id = $this->request->post('delivery_id', 'integer');
$order->payment_method_id = $this->request->post('payment_method_id', 'integer');
$order->name = $this->request->post('name');
$order->name2 = $this->request->post('name2');
$order->email = $this->request->post('email');
$order->address = $this->request->post('address');
$order->phone = $this->request->post('phone');
$order->country = $this->request->post('country');
$order->region = $this->request->post('region');
$order->city = $this->request->post('city');
$order->indx = $this->request->post('indx');
$order->comment = $this->request->post('comment');
$order->ip = $_SERVER['REMOTE_ADDR'];
$this->design->assign('delivery_id', $order->delivery_id);
$this->design->assign('name', $order->name);
$this->design->assign('name2', $order->name2);
$this->design->assign('email', $order->email);
$this->design->assign('phone', $order->phone);
$this->design->assign('country', $order->country);
$this->design->assign('region', $order->region);
$this->design->assign('city', $order->city);
$this->design->assign('indx', $order->indx);
$this->design->assign('address', $order->address);
$delivery = $this->delivery->get_delivery($order->delivery_id);
// Скидка
$cart = $this->cart->get_cart();
$order->discount = $cart->discount;
if($cart->coupon)
{
$order->coupon_discount = $cart->coupon_discount;
$order->coupon_code = $cart->coupon->code;
}
//
if(!empty($this->user->id))
$order->user_id = $this->user->id;
if(empty($order->name))
{
$this->design->assign('error', 'empty_name');
}
// elseif(empty($order->email) && $order->delivery_id != 2)
// {
//$this->design->assign('error', 'empty_email');
// }
elseif($delivery->ems == 1 && !$this->request->post('city2') && $order->delivery_id != 2)
{
$this->design->assign('error', 'empty_city2');
}
$cp = new ReCaptcha('6LegdywdAAAAAJaQLxIlHnITncRtuHQu-HHxeAYG');
$cpResult = $cp->verifyResponse($_SERVER['REMOTE_ADDR'], $this->request->post('recaptcha_response'));
if (!$cpResult->success) {
$this->design->assign('error', 'captcha');
}
else
{
if($delivery->ems==1 )
if($this->request->post('delivery_price'))
$order->delivery_price = $this->request->post('delivery_price');
// Добавляем заказ в базу
$order_id = $this->orders->add_order($order);
$_SESSION['order_id'] = $order_id;
// Если использовали купон, увеличим количество его использований
if($cart->coupon)
$this->coupons->update_coupon($cart->coupon->id, array('usages'=>$cart->coupon->usages+1));
$session_items = $_SESSION['shopping_cart'];
// Добавляем товары к заказу
foreach($this->request->post('amounts') as $variant_id=>$amount)
{
$options = $session_items[$variant_id]['options'];
$this->orders->add_purchase(array('order_id'=>$order_id, 'variant_id'=>intval($variant_id), 'amount'=>intval($amount), 'options'=>$options));
}
$order = $this->orders->get_order($order_id);
// Стоимость доставки
if(!empty($delivery) && $delivery->free_from > $order->total_price)
{
if($delivery->ems == 1 && $this->request->post('city2')){
$data = file_get_contents('http://emspost.ru/api/rest?method=ems.calculate&from='.$this->settings->emsfrom.'&to='.$this->request->post('city2').'&weight='.max(1,$cart->total_weight));
$data = json_decode($data);
if(@$data->rsp->price)
$delivery->price = $data->rsp->price;
}
$this->orders->update_order($order->id, array('delivery_price'=>$delivery->price, 'separate_delivery'=>$delivery->separate_payment));
}
// Отправляем письмо пользователю
if($order->email) $this->notify->email_order_user($order->id);
// Отправляем письмо администратору
$this->notify->email_order_admin($order->id);
// Очищаем корзину (сессию)
$this->cart->empty_cart();
// Перенаправляем на страницу заказа
header('Location: '.$this->config->root_url.'/order/' . $order->url . '/?done=1');
}
}
else
{
// Если нам запостили amounts, обновляем их
if($amounts = $this->request->post('amounts'))
{
foreach($amounts as $variant_id=>$amount)
{
$this->cart->update_item($variant_id, $amount);
}
$coupon_code = trim($this->request->post('coupon_code', 'string'));
if(empty($coupon_code))
{
$this->cart->apply_coupon('');
header('location: '.$this->config->root_url.'/cart/');
}
else
{
$coupon = $this->coupons->get_coupon((string)$coupon_code);
if(empty($coupon) || !$coupon->valid)
{
$this->cart->apply_coupon($coupon_code);
$this->design->assign('coupon_error', 'invalid');
}
else
{
$this->cart->apply_coupon($coupon_code);
header('location: '.$this->config->root_url.'/cart/');
}
}
}
}
}
//////////////////////////////////////////
// Основная функция
//////////////////////////////////////////
function fetch()
{
$this->design->assign('acity', $this->cart->getCity2());
// Способы доставки
$deliveries = $this->delivery->get_deliveries(array('enabled'=>1));
/*order-on-one-page*/
foreach($deliveries as $delivery)
$delivery->payment_methods = $this->payment->get_payment_methods(array('delivery_id'=>$delivery->id, 'enabled'=>1));
$this->design->assign('all_currencies', $this->money->get_currencies());
/*/order-on-one-page*/
$this->design->assign('deliveries', $deliveries);
// Варианты оплаты
$payment_methods = $this->payment->get_payment_methods(array('enabled'=>1));
$this->design->assign('payment_methods', $payment_methods);
$features = $this->features->get_features(array('in_variant'=>1));
foreach($features AS $f){
$feat[$f->id] = $f;
}
$this->design->assign('features', $feat);
// Данные пользователя
if($this->user)
{
$last_order = reset($this->orders->get_orders(array('user_id'=>$this->user->id, 'limit'=>1)));
if($last_order)
{
$this->design->assign('name', $last_order->name);
$this->design->assign('name2', $last_order->name2);
$this->design->assign('email', $last_order->email);
$this->design->assign('phone', $last_order->phone);
$this->design->assign('country', $order->country);
$this->design->assign('region', $order->region);
$this->design->assign('city', $order->city);
$this->design->assign('indx', $order->indx);
$this->design->assign('address', $last_order->address);
}
else
{
$this->design->assign('name', $this->user->name);
$this->design->assign('email', $this->user->email);
}
}
// Если существуют валидные купоны, нужно вывести инпут для купона
if($this->coupons->count_coupons(array('valid'=>1))>0)
$this->design->assign('coupon_request', true);
/*
// Связанные товары
$related_ids = array();
$cart = $this->cart->get_cart();
$purchases_ids = array();
foreach($cart->purchases as $purchase)
{
$purchases_ids[] = $purchase->product->id;
}
foreach($cart->purchases as $purchase)
{
$related = $this->products->get_related_products($purchase->product->id);
foreach($related as $r)
if(!in_array($r->related_id, $related_ids) && !in_array($r->related_id, $purchases_ids))
$related_ids[] = $r->related_id;
}
if(!empty($related_ids))
{
foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p)
$related_products[$p->id] = $p;
$related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products)));
foreach($related_products_images as $related_product_image)
if(isset($related_products[$related_product_image->product_id]))
$related_products[$related_product_image->product_id]->images[] = $related_product_image;
$related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'in_stock'=>1));
foreach($related_products_variants as $related_product_variant)
{
if(isset($related_products[$related_product_variant->product_id]))
{
$related_products[$related_product_variant->product_id]->variants[] = $related_product_variant;
}
}
foreach($related_products as $id=>$r)
{
if(is_object($r))
{
$r->image = &$r->images[0];
$r->variant = &$r->variants[0];
}
else
{
unset($related_products[$id]);
}
}
$this->design->assign('related_products', $related_products);
}
*/
$this->design->assign('meta_title', 'Корзина товаров в');
$this->design->assign('meta_description', 'Корзина покупок, способы доставки и оплаты на сайте atomicgarage.1gb.ru - продажа и установка товаров для тюнинга автомобилей в Санкт-Петербурге.');
$this->design->assign('meta_keywords', 'корзина, заказ, товары, тюнинг, автомобиль, магазин, carheart, установочный центр, санкт-петербург, доставка по россии');
// Выводим корзину
return $this->design->fetch('cart.tpl');
}
}