311 lines
11 KiB
PHP
311 lines
11 KiB
PHP
<?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');
|
||
}
|
||
|
||
} |