Beispiel #1
0
 /**
  * Определяет поведение при изменении и удаление данных в корзине,
  * а так же выводит список позиций к заказу
  *
  * @return void
  */
 public function __construct()
 {
     if (!empty($_REQUEST['updateCart'])) {
         $this->updateCart();
         exit;
     }
     if (!empty($_REQUEST['delFromCart'])) {
         $this->delFromCart();
         exit;
     }
     if (!empty($_POST['coupon'])) {
         $this->applyCoupon();
     }
     $model = new Models_Cart();
     // Если пользователь изменил данные в корзине.
     if (!empty($_REQUEST['refresh'])) {
         $update = array();
         $refreshData = $_REQUEST;
         // Пробегаем по массиву, находим пометки на удаление и на изменение количества.
         foreach ($refreshData as $key => $val) {
             $id = '';
             if ('item_' == substr($key, 0, 5)) {
                 $id = substr($key, 5);
                 // Находим propertyReal для текущего ID продукта.
                 $propertyReal = array();
                 $variantId = array();
                 if (!empty($_SESSION['cart'])) {
                     foreach ($_SESSION['cart'] as $item) {
                         if ($item['id'] == $id) {
                             $propertyReal[] = $item['propertyReal'];
                             $variantId[] = $item['variantId'];
                         }
                     }
                 }
                 if (!empty($val)) {
                     $product = new Models_Product();
                     foreach ($val as $k => $count) {
                         $propertySetId = $refreshData['property_' . $id][$k];
                         if ($count > 0) {
                             $tempProduct = $product->getProduct($id);
                             $countMax = $tempProduct['count'];
                             if ($variantId[$k]) {
                                 $tempProdVar = $product->getVariants($id);
                                 $countMax = $tempProdVar[$variantId[$k]]['count'];
                             }
                             if ($count > $countMax && $countMax > 0) {
                                 $count = $countMax;
                             }
                             if (isset($refreshData['del_' . $id])) {
                                 continue;
                             }
                             $update[] = array('id' => $id, 'count' => $count >= 0 ? $count : 0, 'property' => $_SESSION['propertySetArray'][$propertySetId], 'propertyReal' => $propertyReal[$k], 'propertySetId' => $propertySetId, 'variantId' => $variantId[$k]);
                         } else {
                             if (!empty($_SESSION['propertySetArray'][$propertySetId])) {
                                 unset($_SESSION['propertySetArray'][$propertySetId]);
                             }
                         }
                     }
                 }
             } elseif ('del_' == substr($key, 0, 4)) {
                 $id = substr($ItemId, 4);
                 $count = 0;
             }
         }
         // Передаем в модель данные для обновления корзины.
         $model->refreshCart($update);
         // Пересчитываем маленькую корзину.
         echo "<meta http-equiv=\"refresh\" content=\"0;url=" . $_SERVER['HTTP_REFERER'] . "\">";
         exit;
     }
     if (!empty($_REQUEST['clear'])) {
         $model->clearCart();
         // Пересчитываем маленькую корзину.
         SmalCart::setCartData();
         header('Location: ' . SITE . '/cart');
         exit;
     }
     $settings = MG::get('settings');
     $cartData = $model->getItemsCart();
     // Формируем стандартный массив для представления.
     $this->data = array('isEmpty' => $model->isEmptyCart(), 'productPositions' => $cartData['items'], 'totalSumm' => $cartData['totalSumm'], 'meta_title' => 'Корзина', 'meta_keywords' => !empty($model->currentCategory['meta_keywords']) ? $model->currentCategory['meta_keywords'] : "корзина,покупки,заказ,купленные товары", 'meta_desc' => !empty($model->currentCategory['meta_desc']) ? $model->currentCategory['meta_desc'] : "Положите понравившиеся товары в корзину и вы сможете оформить заказ.", 'currency' => $settings['currency']);
 }
Beispiel #2
0
 /**
  * Определяет поведение при изменении и удаление данных в корзине,
  * а так же выводит список позиций к заказу.
  *
  * @return void
  */
 public function __construct()
 {
     // Обновление данных.
     if (!empty($_REQUEST['updateCart'])) {
         $this->updateCart();
         exit;
     }
     // Удаление данных.
     if (!empty($_REQUEST['delFromCart'])) {
         $this->delFromCart();
         exit;
     }
     // Пересчет скидки купона.
     if (!empty($_POST['coupon'])) {
         $this->applyCoupon();
     }
     $model = new Models_Cart();
     // Если пользователь изменил данные в корзине.
     if (!empty($_REQUEST['refresh'])) {
         $update = array();
         $refreshData = $_REQUEST;
         // Пробегаем по массиву, находим пометки на удаление и на изменение количества.
         foreach ($refreshData as $key => $val) {
             $id = '';
             if ('item_' == substr($key, 0, 5)) {
                 $id = substr($key, 5);
                 // Находим propertyReal для текущего ID продукта.
                 $propertyReal = array();
                 $variantId = array();
                 if (!empty($_SESSION['cart'])) {
                     foreach ($_SESSION['cart'] as $item) {
                         if ($item['id'] == $id) {
                             $propertyReal[] = $item['propertyReal'];
                             $variantId[] = $item['variantId'];
                         }
                     }
                 }
                 if (!empty($val)) {
                     $product = new Models_Product();
                     foreach ($val as $k => $count) {
                         $propertySetId = $refreshData['property_' . $id][$k];
                         if ($count > 0) {
                             $tempProduct = $product->getProduct($id);
                             $countMax = $tempProduct['count'];
                             if ($variantId[$k]) {
                                 $tempProdVar = $product->getVariants($id);
                                 $countMax = $tempProdVar[$variantId[$k]]['count'];
                             }
                             if ($count > $countMax && $countMax > 0) {
                                 $count = $countMax;
                             }
                             $update[] = array('id' => $id, 'count' => $count >= 0 ? $count : 0, 'property' => $_SESSION['propertySetArray'][$propertySetId], 'propertyReal' => $propertyReal[$k], 'propertySetId' => $propertySetId, 'variantId' => $variantId[$k]);
                         } else {
                             if (!empty($_SESSION['propertySetArray'][$propertySetId])) {
                                 unset($_SESSION['propertySetArray'][$propertySetId]);
                             }
                         }
                     }
                 }
             } elseif ('del_' == substr($key, 0, 4)) {
                 $id = substr($ItemId, 4);
                 $count = 0;
             }
         }
         // Передаем в модель данные для обновления корзины.
         $model->refreshCart($update);
         // Пересчитываем маленькую корзину.
         header('Location: ' . SITE . '/cart');
         exit;
     }
     if (!empty($_REQUEST['clear'])) {
         $model->clearCart();
         // Пересчитываем маленькую корзину.
         SmalCart::setCartData();
         header('Location: ' . SITE . '/cart');
         exit;
     }
     $settings = MG::get('settings');
     $cartData = $model->getItemsCart();
     // Подготавливает список связанных товаров.
     foreach ($cartData['items'] as $item) {
         $related .= ',' . $item['related'];
     }
     if (!empty($related)) {
         $codes = explode(',', $related);
         $codes = array_unique($codes);
         $related = implode(',', $codes);
         $product = new Models_Product();
         $related = $product->createRelatedForm($related, 'Добавить в заказ похожие товары', 'layout_relatedcart');
     }
     $this->data = array('isEmpty' => $model->isEmptyCart(), 'productPositions' => $cartData['items'], 'totalSumm' => $cartData['totalSumm'], 'related' => $related, 'meta_title' => 'Корзина', 'meta_keywords' => !empty($model->currentCategory['meta_keywords']) ? $model->currentCategory['meta_keywords'] : "корзина,покупки,заказ,купленные товары", 'meta_desc' => !empty($model->currentCategory['meta_desc']) ? $model->currentCategory['meta_desc'] : "Положите понравившиеся товары в корзину и вы сможете оформить заказ.", 'currency' => $settings['currency']);
 }
Beispiel #3
0
 function __construct()
 {
     // Модель для работы заказом.
     $model = new Models_Order();
     // Печать заказа в квитанцию.
     if (isset($_POST['printQittance'])) {
         $model->printQittance();
     }
     // Первый экран - Оформление заказа.
     $step = 1;
     // Если пришли данные с формы оформления заказа.
     if (isset($_POST['toOrder'])) {
         if (empty($_SESSION['cart'])) {
             MG::redirect('/cart');
         }
         // Если параметры введены корректно, то создается новый заказ.
         if ($error = $model->isValidData($_POST)) {
             $msg = $error;
         } else {
             // Второй экран - оплата заказа
             $step = 2;
             $orderId = $model->addOrder();
             $summ = $model->summ + $model->delivery_cost;
             $pay = $model->payment;
             $paramArray = $model->getParamArray($pay, $orderId, $summ);
         }
     }
     // Обработка действия при переходе по ссылке подтверждения заказа.
     if ($id = URL::getQueryParametr('id')) {
         $info = $this->confirmOrder($id);
         $msg = $info['msg'];
         $userEmail = $info['userEmail'];
         // Третий экран - подтверждение заказа по ссылке из письма.
         $step = 3;
     }
     // Запрос оплаты из ЛК.
     if (URL::getQueryParametr('pay')) {
         // Четвертый экран - Запрос оплаты из ЛК.
         $step = 4;
         $pay = URL::getQueryParametr('paymentId');
         $orderId = URL::getQueryParametr('orderID');
         $order = $model->getOrder(' id = ' . DB::quote($orderId, true));
         $summ = URL::getQueryParametr('orderSumm');
         $summ = $order[$orderId]['summ'] * 1 + $order[$orderId]['delivery_cost'] * 1;
         $paramArray = $model->getParamArray($pay, $orderId, $summ);
     }
     // Если пользователь авторизован, то заполняем форму личными даными.
     if (User::isAuth()) {
         $userInfo = User::getThis();
         $_POST['email'] = $_POST['email'] ? $_POST['email'] : $userInfo->email;
         $_POST['phone'] = $_POST['phone'] ? $_POST['phone'] : $userInfo->phone;
         $_POST['fio'] = $_POST['fio'] ? $_POST['fio'] : $userInfo->name . ' ' . $userInfo->sname;
         $_POST['address'] = $_POST['address'] ? $_POST['address'] : $userInfo->address;
         if ($userInfo->inn) {
             $_POST['customer'] = 'yur';
         }
         $_POST['yur_info']['adress'] = $userInfo->adress;
         $_POST['yur_info']['inn'] = $userInfo->inn;
         $_POST['yur_info']['kpp'] = $userInfo->kpp;
         $_POST['yur_info']['bank'] = $userInfo->bank;
         $_POST['yur_info']['bik'] = $userInfo->bik;
         $_POST['yur_info']['ks'] = $userInfo->ks;
         $_POST['yur_info']['rs'] = $userInfo->rs;
     }
     // Обработка ajax запроса из шаблона.
     if ('getPaymentByDeliveryId' == URL::getQueryParametr('action')) {
         $this->getPaymentByDeliveryId();
     }
     // Обработка ajax запроса из шаблона.
     if ('getEssentialElements' == URL::getQueryParametr('action')) {
         $this->getEssentialElements();
     }
     $this->includeIconsPack();
     // Массив способов доставки.
     $deliveryArray = $this->getDelivery();
     // Массив способов оплаты.
     $paymentTable = $this->getPaymentTable($deliveryArray);
     $orderInfo = $model->getOrder(PREFIX . 'order.id = "' . $orderId . '"');
     $userInfo = USER::getUserInfoByEmail($orderInfo[$orderId]['user_email']);
     $settings = MG::get('settings');
     $cart = new Models_Cart();
     $t = $cart->getItemsCart();
     // Массив параметров для отображения в представлении.
     $this->data = array('active' => !empty($userEmail) ? $userEmail : '', 'msg' => !empty($msg) ? $msg : '', 'step' => !empty($step) ? $step : '', 'delivery' => !empty($deliveryArray) ? $deliveryArray : '', 'paymentArray' => !empty($paymentTable) ? $paymentTable : '', 'paramArray' => !empty($paramArray) ? $paramArray : '', 'id' => !empty($orderId) ? $orderId : '', 'summ' => !empty($summ) ? $summ : '', 'pay' => !empty($pay) ? $pay : '', 'payMentView' => $this->getPaymentView($pay), 'currency' => $settings['currency'], 'userInfo' => $userInfo, 'orderInfo' => $orderInfo, 'meta_title' => 'Оформление заказа', 'meta_keywords' => !empty($model->currentCategory['meta_keywords']) ? $model->currentCategory['meta_keywords'] : "заказы,заявки,оформить,оформление заказа", 'meta_desc' => !empty($model->currentCategory['meta_desc']) ? $model->currentCategory['meta_desc'] : "Оформление заказа происходит в несколько этапов. 1 - ввод личных данных покупателя, 2 - оплата заказа.", 'body_cart' => $t['items']);
 }