示例#1
0
 /**
  * Бесплатная доставка если проходит по условию в найстройках.
  * @param id - id доставки
  * @return numeric
  */
 public function getCostDelivery($id)
 {
     $delivery = $this->getDeliveryById($id);
     $cart = new Models_Cart();
     $cartSumm = $cart->getTotalSumm();
     return $delivery['cost'];
 }
示例#2
0
文件: delivery.php 项目: nellka/mebel
 /**
  * Бесплатная доставка если проходит по условию в найстройках.
  * @param id - id доставки
  * @return numeric
  */
 public function getCostDelivery($id)
 {
     $delivery = $this->getDeliveryById($id);
     $cart = new Models_Cart();
     $cartSumm = $cart->getTotalSumm();
     if ($delivery['free'] != 0 && $delivery['free'] <= $cartSumm) {
         return 0;
     }
     return $delivery['cost'];
 }
示例#3
0
 function __construct()
 {
     $settings = MG::get('settings');
     // Если нажата кнопка купить.
     $_REQUEST['category_id'] = URL::getQueryParametr('category_id');
     if (!empty($_REQUEST['inCartProductId'])) {
         $cart = new Models_Cart();
         // Если параметров  товара не передано
         // возможно была нажата кнопка купить из мини карточки,
         // в этом случае самостоятельно вычисляем набор
         // параметров, которые были бы указаны при открытии карточки товара.
         if (empty($_POST) || isset($_POST['updateCart']) && isset($_POST['inCartProductId']) && count($_POST) == 2) {
             $modelProduct = new Models_Product();
             $product = $modelProduct->getProduct($_REQUEST['inCartProductId']);
             if (empty($product)) {
                 MG::redirect('/404');
                 exit;
             }
             $blockVariants = $modelProduct->getBlockVariants($product['id']);
             $blockedProp = $modelProduct->noPrintProperty();
             $propertyFormData = $modelProduct->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => $product['thisUserFields'], 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => $blockedProp, 'noneAmount' => false, 'titleBtn' => MG::getSetting('buttonBuyName'), 'blockVariants' => $blockVariants, 'currency_iso' => $product['currency_iso']));
             $_POST = $propertyFormData['defaultSet'];
             $_POST['inCartProductId'] = $product['id'];
         }
         $property = $cart->createProperty($_POST);
         $cart->addToCart($_REQUEST['inCartProductId'], $_REQUEST['amount_input'], $property);
         SmalCart::setCartData();
         MG::redirect('/cart');
     }
     if (!empty($_REQUEST['fastsearch'])) {
         $this->getSearchData();
     }
     $countСatalogProduct = $settings['countСatalogProduct'];
     // Показать первую страницу выбранного раздела.
     $page = 1;
     // Запрашиваемая страница.
     if (isset($_REQUEST['p'])) {
         $page = $_REQUEST['p'];
     }
     $model = new Models_Catalog();
     // Если происходит поиск по ключевым словам.
     $keyword = MG::defenderXss_decode(urldecode(URL::getQueryParametr('search')));
     if (!empty($keyword)) {
         $keyword = $this->convertLang($keyword);
         $items = $model->getListProductByKeyWord($keyword, false, true, false, 'groupBy');
         $searchData = array('keyword' => $keyword, 'count' => $items['numRows']);
     } else {
         // Получаем список вложенных категорий,
         // для вывода всех продуктов, на страницах текущей категории.
         if (empty($_REQUEST['category_id'])) {
             $_REQUEST['category_id'] = 0;
         }
         $model->categoryId = MG::get('category')->getCategoryList($_REQUEST['category_id']);
         // В конец списка, добавляем корневую текущую категорию.
         $model->categoryId[] = $_REQUEST['category_id'];
         // Записываем в глобальную переменную список всех вложенных категорий,
         // чтобы использовать в других местах кода, например в фильтре по характеристикам
         $_REQUEST['category_ids'] = $model->categoryId;
         // Передаем номер требуемой страницы, и количество выводимых объектов.
         $countСatalogProduct = $settings['countСatalogProduct'];
         $items = $model->getList($countСatalogProduct, false, true);
     }
     // Если с фильтра пришел запрос только на количество позиций.
     if (!empty($_REQUEST['getcount']) && !empty($_REQUEST['filter'])) {
         echo $items['totalCountItems'] ? $items['totalCountItems'] : 0;
         exit;
     }
     $settings = MG::get('settings');
     if (empty($items['catalogItems'])) {
         $items['catalogItems'] = array();
     } else {
         foreach ($items['catalogItems'] as $item) {
             if ($item['id']) {
                 $productIds[] = $item['id'];
             }
         }
         $product = new Models_Product();
         $blocksVariants = empty($productIds) ? null : $product->getBlocksVariantsToCatalog($productIds);
         $blockedProp = $product->noPrintProperty();
         $actionButton = MG::getSetting('actionInCatalog') === "true" ? 'actionBuy' : 'actionView';
         foreach ($items['catalogItems'] as $k => $item) {
             $imagesUrl = explode("|", $item['image_url']);
             $items['catalogItems'][$k]["image_url"] = "";
             if (!empty($imagesUrl[0])) {
                 $items['catalogItems'][$k]["image_url"] = $imagesUrl[0];
             }
             $items['catalogItems'][$k]['title'] = MG::modalEditor('catalog', $item['title'], 'edit', $item["id"]);
             if ($items['catalogItems'][$k]['count'] == 0) {
                 $buyButton = $items['catalogItems'][$k]['actionView'];
             } else {
                 $buyButton = $items['catalogItems'][$k][$actionButton];
                 if (!empty($items['catalogItems'][$k]['variants'])) {
                     foreach ($items['catalogItems'][$k]['variants'] as $variant) {
                         if ($variant['count'] == 0) {
                             $buyButton = $items['catalogItems'][$k]['actionView'];
                         }
                     }
                 }
             }
             // Легкая форма без характеристик.
             $liteFormData = $product->createPropertyForm($param = array('id' => $item['id'], 'maxCount' => $item['count'], 'productUserFields' => null, 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => $blockedProp, 'noneAmount' => true, 'titleBtn' => "В корзину", 'blockVariants' => $blocksVariants[$item['id']], 'buyButton' => $buyButton));
             $items['catalogItems'][$k]['liteFormData'] = $liteFormData['html'];
             $buyButton = $items['catalogItems'][$k]['liteFormData'];
             $items['catalogItems'][$k]['buyButton'] = $buyButton;
         }
     }
     $categoryDesc = MG::get('category')->getDesctiption($_REQUEST['category_id']);
     if ($_REQUEST['category_id']) {
         $categoryDesc = MG::inlineEditor(PREFIX . 'category', "html_content", $_REQUEST['category_id'], $categoryDesc);
     }
     $catImg = MG::get('category')->getImageCategory($_REQUEST['category_id']);
     //$model->currentCategory['title'] = $_REQUEST['category_id'] ? $model->currentCategory['title'] : 0,
     //var_dump($model->currentCategory['title']);
     $data = array('items' => $items['catalogItems'], 'titeCategory' => $model->currentCategory['title'], 'cat_desc' => $categoryDesc, 'cat_img' => $catImg, 'cat_id' => $_REQUEST['category_id'] ? $_REQUEST['category_id'] : 0, 'filterBar' => $items['filterBarHtml'], 'totalCountItems' => $items['totalCountItems'], 'pager' => $items['pager'], 'searchData' => empty($searchData) ? '' : $searchData, 'meta_title' => !empty($model->currentCategory['meta_title']) ? $model->currentCategory['meta_title'] : $model->currentCategory['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'], 'actionButton' => $actionButton);
     if (URL::isSection('catalog') || MG::getSetting('catalogIndex') == 'true' && (URL::isSection('index') || URL::isSection(''))) {
         $html = MG::get('pages')->getPageByUrl('catalog');
         $html['html_content'] = MG::inlineEditor(PREFIX . 'page', "html_content", $html['id'], $html['html_content']);
         $data['meta_title'] = $html['meta_title'] ? $html['meta_title'] : $html['title'];
         $data['meta_title'] = $data['meta_title'] ? $data['meta_title'] : $model->currentCategory['title'];
         $data['meta_keywords'] = $html['meta_keywords'];
         $data['meta_desc'] = $html['meta_desc'];
         $data['cat_desc'] = $html['html_content'];
         $data['titeCategory'] = $html['title'];
     }
     if ($keyword) {
         $data['meta_title'] = 'Поиск по фразе: ' . $keyword;
     }
     $this->data = $data;
 }
示例#4
0
 /**
  * Возвращает массив доступных способов доставки.
  * @return mixed массив доступных способов доставки .
  */
 public function getDelivery()
 {
     $result = array();
     // Модель для работы заказом.
     $model = new Models_Order();
     $cart = new Models_Cart();
     $cartSumm = $cart->getTotalSumm();
     foreach ($model->getDeliveryMethod() as $id => $delivery) {
         if ($delivery['free'] != 0 && $delivery['free'] <= $cartSumm) {
             $delivery['cost'] = 0;
         }
         if (!$delivery['activity']) {
             continue;
         }
         if (isset($_POST['delivery']) && $_POST['delivery'] == $id) {
             $delivery['checked'] = 1;
         }
         // Заполнение массива способов доставки.
         $result[$delivery['id']] = $delivery;
     }
     // Если доступен только один способ доставки, то он будет выделен.
     if (1 === count($result)) {
         $deliveryId = array_keys($result);
         $result[$deliveryId[0]]['checked'] = 1;
     }
     return $result;
 }
示例#5
0
 /**
  * Сохраняет заказ в базу сайта.
  * Добавляет в массив корзины третий параметр 'цена товара', для сохранения в заказ.
  * Это нужно для тогою чтобы в последствии вывести детальную информацию о заказе.
  * Если оставить только id то информация может оказаться неверной, так как цены меняютcя.
  * @return int $id номер заказа.
  */
 public function addOrder($adminOrder = false)
 {
     $itemPosition = new Models_Product();
     $cart = new Models_Cart();
     $catalog = new Models_Catalog();
     $categoryArray = $catalog->getCategoryArray();
     $this->summ = 0;
     $currencyRate = MG::getSetting('currencyRate');
     $currencyShopIso = MG::getSetting('currencyShopIso');
     // Массив запросов на обновление количества товаров.
     $updateCountProd = array();
     // Добавляем в массив корзины параметр 'цена товара'.
     if ($adminOrder) {
         $this->email = $adminOrder['user_email'];
         $this->phone = $adminOrder['phone'];
         $this->address = $adminOrder['address'];
         $this->delivery = $adminOrder['delivery_id'];
         $this->dateDelivery = $adminOrder['date_delivery'];
         $this->delivery_cost = $adminOrder['delivery_cost'];
         $this->payment = $adminOrder['payment_id'];
         $this->fio = $adminOrder['name_buyer'];
         $formatedDate = date('Y-m-d H:i:s');
         // Форматированная дата ГГГГ-ММ-ДД ЧЧ:ММ:СС.
         foreach ($adminOrder['order_content'] as $item) {
             $product = $itemPosition->getProduct($item['id']);
             $_SESSION['couponCode'] = $item['coupon'];
             $product['category_url'] = $product['category_url'] ? $product['category_url'] : 'catalog';
             $productUrl = $product['category_url'] . '/' . $product['url'];
             $itemCount = $item['count'];
             if (!empty($product)) {
                 $fulPrice = $item['fulPrice'];
                 // полная стоимость без скидки
                 $product['price'] = $item['price'];
                 // $product['price'] = $item['price_course'];
                 //$product['currency_iso'] = $product['currency_iso']?$product['currency_iso']:$currencyShopIso;
                 //$product['price'] *= $currencyRate[$product['currency_iso']];
                 $discount = 0;
                 if (!empty($item['price']) && (!empty($item['coupon']) || stristr($item['discSyst'], 'true') !== false)) {
                     $discount = 100 - $product['price'] * 100 / $fulPrice;
                 }
                 $productPositions[] = array('id' => $product['id'], 'name' => $item['title'], 'url' => $productUrl, 'code' => $item['code'], 'price' => $product['price'], 'count' => $itemCount, 'property' => $item['property'], 'coupon' => $_SESSION['couponCode'], 'discount' => round($discount, 1), 'fulPrice' => $fulPrice, 'weight' => $product['weight'], 'currency_iso' => $currencyShopIso, 'discSyst' => !empty($item['discSyst']) ? $item['discSyst'] : '');
                 $this->summ += $product['price'] * $itemCount;
                 // По ходу формируем массив запросов на обновление количества товаров.
                 if ($item['variant'] == 0) {
                     $product['count'] = $product['count'] - $itemCount >= 0 ? $product['count'] - $itemCount : 0;
                     $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($product['count']) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0";
                 } else {
                     $count = DB::query('
           SELECT count
           FROM `' . PREFIX . 'product_variant`
           WHERE id = ' . DB::quote($item['variant']));
                     $count = DB::fetchAssoc($count);
                     $product['count'] = $count['count'] - $itemCount >= 0 ? $count['count'] - $itemCount : 0;
                     $updateCountProd[] = "UPDATE `" . PREFIX . "product_variant` SET `count`= " . DB::quote($product['count']) . " WHERE `id`=" . DB::quote($item['variant']) . " AND `count`>0";
                     $variants = $itemPosition->getVariants($product['id']);
                     $firstVariant = reset($variants);
                     if ($firstVariant['id'] == $item['variant']) {
                         // если приобретен вариант товара, то выясним является ли он первым в наборе, если да то обновим информацию в mg_product
                         $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($product['count']) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0";
                     }
                 }
                 $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count_buy`= `count_buy` + 1 WHERE `id`=" . DB::quote($product['id']);
             }
         }
     } elseif (!empty($_SESSION['cart'])) {
         foreach ($_SESSION['cart'] as $item) {
             $product = $itemPosition->getProduct($item['id']);
             // Дописываем к массиву продуктов данные о выбранных характеристиках из корзины покупок, чтобы приплюсовать к сумме заказа.
             if ($item['id'] == $product['id']) {
                 $product['property_html'] = $item['propertyReal'];
             }
             $variant = null;
             $discount = null;
             $promocode = null;
             if (!empty($item['variantId']) && $item['id'] == $product['id']) {
                 $variants = $itemPosition->getVariants($product['id']);
                 $variant = $variants[$item['variantId']];
                 $product['price'] = $variant['price_course'];
                 $fulPrice = $product['price'];
                 $priceWithCoupon = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product);
                 $priceWithDiscount = $cart->applyDiscountSystem($product['price']);
                 //$product['price'] = $priceWithCoupon < $priceWithDiscount['price'] ? $priceWithCoupon : $priceWithDiscount['price'];
                 $product['price'] = $cart->customPrice(array('product' => $product, 'priceWithCoupon' => $priceWithCoupon, 'priceWithDiscount' => $priceWithDiscount['price']));
                 $product['code'] = $variant['code'];
                 $product['count'] = $variant['count'];
                 $product['weight'] = $variant['weight'];
                 $product['title'] .= " " . $variant['title_variant'];
                 $discountSystem = $priceWithDiscount['discounts'];
                 $promocode = $priceWithDiscount['discounts'] != '' ? $priceWithDiscount['promo'] : $_SESSION['couponCode'];
                 //По ходу формируем массив запросов на обновление количества товаров
                 $resCount = $variant['code'];
                 $resCount = $variant['count'] - $item['count'] >= 0 ? $variant['count'] - $item['count'] : 0;
                 $updateCountProd[] = "UPDATE `" . PREFIX . "product_variant` SET `count`= " . DB::quote($resCount) . " WHERE `id`=" . DB::quote($item['variantId']) . " AND `count`>0";
             }
             $product['category_url'] = $product['category_url'] ? $product['category_url'] : 'catalog';
             $productUrl = $product['category_url'] . '/' . $product['url'];
             // Eсли куки не актуальны исключает попадание несуществующего продукта в заказ
             if (!empty($product)) {
                 if (!$variant) {
                     $product['price'] = $product['price_course'];
                     $fulPrice = $product['price'];
                 }
                 $product['price'] = SmalCart::plusPropertyMargin($fulPrice, $product['property_html'], $currencyRate[$product['currency_iso']]);
                 //$product['currency_iso'] = $product['currency_iso']?$product['currency_iso']:$currencyShopIso;
                 //$product['price'] *= $currencyRate[$product['currency_iso']];
                 $fulPrice = $product['price'];
                 $tempPrice = $product['price'];
                 //   if (!$variant) {
                 $priceWithCoupon = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product);
                 $priceWithDiscount = $cart->applyDiscountSystem($product['price']);
                 //$product['price'] = $priceWithCoupon < $priceWithDiscount['price'] ? $priceWithCoupon : $priceWithDiscount['price'];
                 $product['price'] = $cart->customPrice(array('product' => $product, 'priceWithCoupon' => $priceWithCoupon, 'priceWithDiscount' => $priceWithDiscount['price']));
                 $discountSystem = $priceWithDiscount['discounts'];
                 $promocode = $priceWithDiscount['discounts'] != '' ? $priceWithDiscount['promo'] : $_SESSION['couponCode'];
                 //    }
                 $discount = 0;
                 if (!empty($tempPrice)) {
                     $discount = 100 - $product['price'] * 100 / $tempPrice;
                 }
                 $productPositions[] = array('id' => $product['id'], 'name' => $product['title'], 'url' => $productUrl, 'code' => $product['code'], 'price' => $product['price'], 'count' => $item['count'], 'property' => $item['property'], 'coupon' => $promocode, 'discount' => round($discount), 'fulPrice' => $fulPrice, 'weight' => $product['weight'], 'currency_iso' => $currencyShopIso, 'discSyst' => $discountSystem ? $discountSystem : '');
                 $this->summ += $product['price'] * $item['count'];
                 if (!$resCount) {
                     $resCount = $product['count'] - $item['count'] >= 0 ? $product['count'] - $item['count'] : 0;
                 }
                 //По ходу формируем массив запросов на обновление количества товаров
                 if (!$variant) {
                     $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($resCount) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0";
                 } else {
                     $firstVariant = reset($variants);
                     if ($firstVariant['id'] == $item['variantId']) {
                         // если приобретен вариант товара, то выясним является ли он первым в наборе, если да то обновим информацию в mg_product
                         $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($resCount) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0";
                     }
                 }
                 $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count_buy`= `count_buy` + 1 WHERE `id`=" . DB::quote($product['id']);
                 $resCount = null;
             }
         }
     }
     // Сериализует данные в строку для записи в бд.
     $orderContent = addslashes(serialize($productPositions));
     // Сериализует данные в строку для записи в бд информации об юридическом лице.
     $yurInfo = '';
     if (!empty($adminOrder['yur_info'])) {
         $yurInfo = addslashes(serialize($adminOrder['yur_info']));
     }
     if (!empty($_POST['yur_info'])) {
         $yurInfo = addslashes(serialize($_POST['yur_info']));
     }
     // Создает новую модель корзины, чтобы узнать сумму заказа.
     $cart = new Models_Cart();
     // Генерируем уникальный хэш для подтверждения заказа.
     $hash = $this->_getHash($this->email);
     //Достаем настройки заказов, чтобы установить статус для нового заказа.
     $propertyOrder = MG::getOption('propertyOrder');
     $propertyOrder = stripslashes($propertyOrder);
     $propertyOrder = unserialize($propertyOrder);
     $order_status_id = $this->payment == 3 && $propertyOrder['order_status'] == 1 ? 3 : $propertyOrder['order_status'];
     // Формируем массив параметров для SQL запроса.
     $array = array('user_email' => $this->email, 'summ' => number_format($this->summ, 2, '.', ''), 'order_content' => $orderContent, 'phone' => $this->phone, 'address' => $this->address, 'delivery_id' => $this->delivery, 'delivery_cost' => $this->delivery_cost, 'payment_id' => $this->payment, 'paided' => '0', 'status_id' => $order_status_id, 'confirmation' => $hash, 'yur_info' => $yurInfo, 'name_buyer' => $this->fio, 'date_delivery' => $this->dateDelivery, 'user_comment' => $this->info, 'ip' => $_SERVER['REMOTE_ADDR']);
     // Если заказ оформляется через админку.
     if ($adminOrder) {
         $array['comment'] = $adminOrder['comment'];
         $array['status_id'] = $adminOrder['status_id'];
         $array['add_date'] = $formatedDate;
         $array['date_delivery'] = $adminOrder['date_delivery'];
         DB::buildQuery("INSERT INTO `" . PREFIX . "order` SET ", $array);
     } else {
         // Отдает на обработку  родительской функции buildQuery.
         DB::buildQuery("INSERT INTO `" . PREFIX . "order` SET add_date = now(), ", $array);
     }
     // Заказ номер id добавлен в базу.
     $id = null;
     $id = DB::insertId();
     $_SESSION['usedCouponCode'] = $_SESSION['couponCode'];
     unset($_SESSION['couponCode']);
     $orderNumber = $this->getOrderNumber($id);
     $hashStatus = '';
     $linkToStatus = '';
     if (MG::getSetting('autoRegister') == "false" && !USER::isAuth()) {
         $hashStatus = md5($id . $this->email . rand(9999));
         $linkToStatus = '<a href="' . SITE . '/order?hash=' . $hashStatus . '" target="blank">' . SITE . '/order?hash=' . $hashStatus . '</a>';
     }
     DB::query("UPDATE `" . PREFIX . "order` SET `number`= " . DB::quote($orderNumber) . ", `hash`=" . DB::quote($hashStatus) . " WHERE `id`=" . DB::quote($id) . "");
     // Ссылка для подтверждения заказа
     $link = 'ссылке <a href="' . SITE . '/order?sec=' . $hash . '&id=' . $id . '" target="blank">' . SITE . '/order?sec=' . $hash . '&id=' . $id . '</a>';
     $table = "";
     // Формирование тела письма.
     if ($id) {
         // Уменьшаем количество купленных товаров
         if (!empty($updateCountProd)) {
             foreach ($updateCountProd as $sql) {
                 DB::query($sql);
             }
             foreach ($productPositions as $product) {
                 Storage::clear(md5('ControllersProduct' . $product['url']));
             }
         }
         // Если заказ создался, то уменьшаем количество товаров на складе.
         $settings = MG::get('settings');
         $delivery = $this->getDeliveryMethod(false, $this->delivery);
         $sitename = $settings['sitename'];
         $currency = MG::getSetting('currency');
         $paymentArray = $this->getPaymentMethod($this->payment);
         $subj = 'Оформлена заявка №' . ($orderNumber != "" ? $orderNumber : $id) . ' на сайте ' . $sitename;
         foreach ($productPositions as &$item) {
             foreach ($item as &$v) {
                 $v = rawurldecode($v);
             }
         }
         $paramToMail = array('orderNumber' => $orderNumber, 'siteName' => MG::getSetting('sitename'), 'delivery' => $delivery, 'currency' => MG::getSetting('currency'), 'fio' => $this->fio, 'email' => $this->email, 'phone' => $this->phone, 'address' => $this->address, 'delivery' => $delivery['description'], 'payment' => $paymentArray['name'], 'adminOrder' => $adminOrder, 'result' => $this->summ, 'deliveryCost' => $this->delivery_cost, 'date_delivery' => $this->dateDelivery, 'total' => $this->delivery_cost + $this->summ, 'confirmLink' => $link, 'ip' => $this->ip, 'lastvisit' => $_SESSION['lastvisit'], 'firstvisit' => $_SESSION['firstvisit'], 'supportEmail' => MG::getSetting('noReplyEmail'), 'shopName' => MG::getSetting('shopName'), 'shopPhone' => MG::getSetting('shopPhone'), 'formatedDate' => date('Y-m-d H:i:s'), 'productPositions' => $productPositions, 'couponCode' => $_SESSION['couponCode'], 'toKnowStatus' => $linkToStatus);
         $emailToUser = MG::layoutManager('email_order', $paramToMail);
         $paramToMail['adminMail'] = true;
         $emailToAdmin = MG::layoutManager('email_order', $paramToMail);
         $mails = explode(',', MG::getSetting('adminEmail'));
         foreach ($mails as $mail) {
             if (preg_match('/^[-._a-zA-Z0-9]+@(?:[a-zA-Z0-9][-a-zA-Z0-9]+\\.)+[a-zA-Z]{2,6}$/', $mail)) {
                 Mailer::addHeaders(array("Reply-to" => $this->email));
                 Mailer::sendMimeMail(array('nameFrom' => $this->fio, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $sitename, 'emailTo' => $mail, 'subject' => $subj, 'body' => $emailToAdmin, 'html' => true));
             }
         }
         // Отправка заявки пользователю.
         Mailer::sendMimeMail(array('nameFrom' => $sitename, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $this->fio, 'emailTo' => $this->email, 'subject' => $subj, 'body' => $emailToUser, 'html' => true));
         // Если заказ успешно записан, то очищает корзину.
         if (!$adminOrder) {
             $cart->clearCart();
         }
     }
     $result = array('id' => $id, 'orderNumber' => $orderNumber);
     // Возвращаем номер созданого заказа.
     $args = func_get_args();
     return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args);
 }
示例#6
0
 /**
  * Вычисляет общую стоимость содержимого, а также количество.
  * @return array массив с данными о количестве и цене.
  */
 public static function getCartData()
 {
     $modelCart = new Models_Cart();
     // Количество вещей в корзине.
     $res['cart_count'] = 0;
     // Общая стоимость.
     $res['cart_price'] = 0;
     // Если удалось получить данные из куков и они успешно десериализованы в $_SESSION['cart'].
     //self::getCokieCart() &&
     if (!empty($_SESSION['cart'])) {
         $settings = MG::get('settings');
         $totalPrice = 0;
         $totalCount = 0;
         if (!empty($_SESSION['cart'])) {
             $itemIds = array();
             $variantsId = array();
             foreach ($_SESSION['cart'] as $key => $item) {
                 if (!empty($item['id'])) {
                     if (!empty($item['variantId'])) {
                         $variantsId[] = $item['variantId'];
                     }
                     $itemIds[] = $item['id'];
                 }
             }
             if (!empty($itemIds)) {
                 // Пробегаем по содержимому.
                 $idsPr = implode(',', array_unique($itemIds));
                 $where = ' IN (' . trim(DB::quote($idsPr), "'") . ')';
             }
         } else {
             $where = ' IN (0)';
         }
         // Пробегаем по содержимому.
         //   $where = ' IN ('.trim(DB::quote(implode(',',$itemIds)),"'").')';
         $result = DB::query('
       SELECT CONCAT(c.parent_url,c.url) AS category_url, p.url AS product_url, p.*, rate,
       (p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`, p.currency_iso
       FROM `' . PREFIX . 'product` AS p
       LEFT JOIN `' . PREFIX . 'category` AS c ON c.id = p.cat_id
       WHERE p.id ' . $where);
         $array_variants = array();
         if (!empty($variantsId)) {
             $ids = implode(',', $variantsId);
             $variants_res = DB::query('SELECT  pv.*, c.rate,(pv.price_course + pv.price_course *(IFNULL(c.rate,0))) as `price_course`,
       p.currency_iso
       FROM `' . PREFIX . 'product_variant` pv   
       LEFT JOIN `' . PREFIX . 'product` as p ON 
         p.id = pv.product_id
       LEFT JOIN `' . PREFIX . 'category` as c ON 
         c.id = p.cat_id       
       WHERE pv.id IN (' . trim(DB::quote($ids, true)) . ')');
             while ($variant_row = DB::fetchAssoc($variants_res)) {
                 $array_variants[$variant_row['id']] = $variant_row;
             }
         }
         $currencyRate = MG::getSetting('currencyRate');
         $currencyShopIso = MG::getSetting('currencyShopIso');
         $products_row = array();
         while ($prod = DB::fetchAssoc($result)) {
             $products_row[$prod['id']] = $prod;
         }
         foreach ($_SESSION['cart'] as $key => $item) {
             $variant = null;
             $row = $products_row[$item['id']];
             $arrayImages = explode("|", $row['image_url']);
             if (!empty($item['variantId'])) {
                 $variant = $array_variants[$item['variantId']];
                 $image = $variant['image'] ? $variant['image'] : $arrayImages[0];
                 $row['price'] = $variant['price'];
                 $row['code'] = $variant['code'];
                 $row['count'] = $variant['count'];
                 $row['image_url'] = $variant['image'] ? $variant['image'] : $row['image_url'];
                 $row['image_url_new'] = mgImageProductPath($image, $item['id'], 'small');
                 $row['weight'] = $variant['weight'];
                 $row['title'] = $row['title'] . " " . $variant['title_variant'];
                 $row['variantId'] = $variant['id'];
                 $row['price_course'] = $variant['price_course'];
             }
             $price = $row['price_course'];
             if ($item['id'] == $row['id']) {
                 $count = $item['count'];
                 $row['countInCart'] = $count;
                 $row['property_html'] = htmlspecialchars_decode(str_replace('&amp;', '&', $item['property']));
                 $price = self::plusPropertyMargin($price, $item['propertyReal'], $currencyRate[$row['currency_iso']]);
                 $row['property'] = $item['propertySetId'];
                 $priceWithCoupon = $modelCart->applyCoupon($_SESSION['couponCode'], $price, $row);
                 //$row['currency_iso'] = $row['currency_iso']?$row['currency_iso']:$currencyShopIso;
                 //$price *= $currencyRate[$row['currency_iso']];
                 $priceWithDiscount = $modelCart->applyDiscountSystem($price);
                 //$price = $priceWithCoupon < $priceWithDiscount['price'] ? $priceWithCoupon : $priceWithDiscount['price'];
                 $price = $modelCart->customPrice(array('product' => $row, 'priceWithCoupon' => $priceWithCoupon, 'priceWithDiscount' => $priceWithDiscount['price']));
                 // если выбран формат без копеек, то округляем стоимость до ворматирования.
                 if (in_array(MG::getSetting('priceFormat'), array('1234', '1 234', '1,234'))) {
                     $price = round($price);
                 }
                 $row['priceInCart'] = MG::priceCourse($price * $count) . " " . $settings['currency'];
                 if (!empty($arrayImages)) {
                     $row['image_url'] = $arrayImages[0];
                     $row['image_url_new'] = mgImageProductPath($arrayImages[0], $item['id'], 'small');
                 }
                 $row['category_url'] = SHORT_LINK == '1' ? '' : $row['category_url'] . '/';
                 $row['price'] = $price;
                 $res['dataCart'][] = $row;
                 $totalPrice += $price * $count;
                 $totalCount += $count;
                 $itemIds[] = $item['id'];
             }
         }
         $res['cart_price_wc'] = MG::priceCourse($totalPrice) . " " . $settings['currency'];
         $res['cart_count'] = $totalCount;
         $res['cart_price'] = MG::priceCourse($totalPrice);
     }
     $args = func_get_args();
     return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $res, $args);
 }
示例#7
0
文件: product.php 项目: nellka/mebel
 /**
  * Обновление состояния корзины.
  */
 public function calcPrice()
 {
     $product = $this->getProduct($_POST['inCartProductId']);
     $currencyRate = MG::getSetting('currencyRate');
     $currencyShopIso = MG::getSetting('currencyShopIso');
     if (isset($_POST['variant'])) {
         $variants = $this->getVariants($_POST['inCartProductId']);
         $variant = $variants[$_POST['variant']];
         $product['price'] = $variant['price'];
         $product['code'] = $variant['code'];
         $product['count'] = $variant['count'];
         $product['old_price'] = $variant['old_price'];
         $product['weight'] = $variant['weight'];
         $product['price_course'] = $variant['price_course'];
     }
     $cart = new Models_Cart();
     $property = $cart->createProperty($_POST);
     //var_dump($property);
     $product['currency_iso'] = $product['currency_iso'] ? $product['currency_iso'] : $currencyShopIso;
     $product['price'] = $product['price_course'];
     $product['price'] = SmalCart::plusPropertyMargin($product['price'], $property['propertyReal'], $currencyRate[$product['currency_iso']]);
     $product['real_price'] = $product['price'];
     $product['old_price'] *= $currencyRate[$product['currency_iso']];
     $response = array('status' => 'success', 'data' => array('title' => $product['title'], 'price' => MG::numberFormat($product['price']) . ' ' . MG::getSetting('currency'), 'old_price' => MG::numberFormat($product['old_price']) . ' ' . MG::getSetting('currency'), 'code' => $product['code'], 'count' => $product['count'], 'price_wc' => $product['price'], 'real_price' => $product['real_price'], 'weight' => $product['weight']));
     echo json_encode($response);
     exit;
 }
示例#8
0
 function __construct()
 {
     $settings = MG::get('settings');
     // Если нажата кнопка купить.
     $_REQUEST['category_id'] = URL::getQueryParametr('category_id');
     if (!empty($_REQUEST['inCartProductId'])) {
         $cart = new Models_Cart();
         $property = $cart->createProperty($_POST);
         $cart->addToCart($_REQUEST['inCartProductId'], $_REQUEST['amount_input'], $property);
         SmalCart::setCartData();
         MG::redirect('/cart');
     }
     $countСatalogProduct = $settings['countСatalogProduct'];
     // Показать первую страницу выбранного раздела.
     $page = 1;
     // Запрашиваемая страница.
     if (isset($_REQUEST['p'])) {
         $page = $_REQUEST['p'];
     }
     $model = new Models_Catalog();
     // Получаем список вложенных категорий, для вывода всех продуктов, на страницах текущей категории.
     $model->categoryId = MG::get('category')->getCategoryList($_REQUEST['category_id']);
     // В конец списка, добавляем корневую текущую категорию.
     $model->categoryId[] = $_REQUEST['category_id'];
     // Передаем номер требуемой страницы, и количество выводимых объектов.
     $countСatalogProduct = 100;
     $actionButton = MG::getSetting('actionInCatalog') === "true" ? 'actionBuy' : 'actionView';
     $dataGroupProducts = Storage::get(md5('dataGroupProductsIndexConroller'));
     $currencyRate = MG::getSetting('currencyRate');
     $currencyShopIso = MG::getSetting('currencyShopIso');
     $randomProdBlock = MG::getSetting('randomProdBlock') == "true" ? true : false;
     if ($dataGroupProducts == null) {
         // Формируем список товаров со старой ценой.
         $sort = $randomProdBlock ? "RAND()" : "sort";
         $saleProducts = $model->getListByUserFilter(MG::getSetting('countSaleProduct'), ' (p.old_price>0 || pv.old_price>0) and p.activity=1 ORDER BY ' . $sort . ' ASC');
         $recommendProducts = $model->getListByUserFilter(MG::getSetting('countRecomProduct'), ' p.recommend=1 ORDER BY ' . $sort . ' ASC');
         $newProducts = $model->getListByUserFilter(MG::getSetting('countNewProduct'), ' p.new=1 ORDER BY ' . $sort . ' ASC');
         foreach ($saleProducts['catalogItems'] as &$item) {
             $imagesUrl = explode("|", $item['image_url']);
             $item["image_url"] = "";
             if (!empty($imagesUrl[0])) {
                 $item["image_url"] = $imagesUrl[0];
             }
             $item['currency_iso'] = $item['currency_iso'] ? $item['currency_iso'] : $currencyShopIso;
             //$item['price'] *= $currencyRate[$item['currency_iso']];
             $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0;
             $item['price'] = MG::priceCourse($item['price_course']);
             if ($printCompareButton != 'true') {
                 $item['actionCompare'] = '';
             }
             if ($actionButton == 'actionBuy' && $item['count'] == 0) {
                 $item['actionBuy'] = $item['actionView'];
             }
         }
         $dataGroupProducts['recommendProducts'] = $recommendProducts;
         $dataGroupProducts['newProducts'] = $newProducts;
         $dataGroupProducts['saleProducts'] = $saleProducts;
         Storage::save(md5('dataGroupProductsIndexConroller'), $dataGroupProducts);
     }
     $recommendProducts = $dataGroupProducts['recommendProducts'];
     $newProducts = $dataGroupProducts['newProducts'];
     $saleProducts = $dataGroupProducts['saleProducts'];
     $html = MG::get('pages')->getPageByUrl('index');
     if (!empty($html)) {
         $html['html_content'] = MG::inlineEditor(PREFIX . 'page', "html_content", $html['id'], $html['html_content']);
     } else {
         $html['html_content'] = '';
     }
     $this->data = array('newProducts' => !empty($newProducts['catalogItems']) ? $newProducts['catalogItems'] : array(), 'recommendProducts' => !empty($recommendProducts['catalogItems']) ? $recommendProducts['catalogItems'] : array(), 'saleProducts' => !empty($saleProducts['catalogItems']) ? $saleProducts['catalogItems'] : array(), 'titeCategory' => $html['meta_title'], 'cat_desc' => $html['html_content'], 'meta_title' => $html['meta_title'], 'meta_keywords' => $html['meta_keywords'], 'meta_desc' => $html['meta_desc'], 'currency' => $settings['currency'], 'actionButton' => $actionButton);
 }
示例#9
0
文件: cart.php 项目: nellka/mebel
 /**
  * Удаляет товар из корзины.
  */
 public function delFromCart()
 {
     $cart = new Models_Cart();
     $property = $_SESSION['propertySetArray'][$_POST['property']];
     $cart->delFromCart($_POST['itemId'], $property, $_POST['variantId']);
     $response = array('status' => 'success', 'data' => SmalCart::getCartData());
     echo json_encode($response);
     exit;
 }
示例#10
0
 /**
  * Обновление состояния корзины.
  */
 public function calcPrice()
 {
     $product = $this->getProduct($_POST['inCartProductId']);
     if (isset($_POST['variant'])) {
         $variants = $this->getVariants($_POST['inCartProductId']);
         $variant = $variants[$_POST['variant']];
         $product['price'] = $variant['price'];
         $product['code'] = $variant['code'];
         $product['count'] = $variant['count'];
         $product['old_price'] = $variant['old_price'];
     }
     $cart = new Models_Cart();
     $property = $cart->createProperty($_POST);
     $product['price'] = SmalCart::plusPropertyMargin($product['price'], $property['propertyReal']);
     $response = array('status' => 'success', 'data' => array('price' => $product['price'] . ' ' . MG::getSetting('currency'), 'old_price' => $product['old_price'] . ' ' . MG::getSetting('currency'), 'code' => $product['code'], 'count' => $product['count'], 'price_wc' => $product['price']));
     echo json_encode($response);
     exit;
 }
示例#11
0
 /**
  * Сохраняет заказ в базу сайта.
  * Добавляет в массив корзины третий параметр 'цена товара', для сохранения в заказ.
  * Это нужно для тогою чтобы в последствии вывести детальную информацию о заказе.
  * Если оставить только id то информация может оказаться неверной, так как цены меняютcя.
  * @return int $id номер заказа.
  */
 public function addOrder($adminOrder = false)
 {
     $itemPosition = new Models_Product();
     $cart = new Models_Cart();
     $catalog = new Models_Catalog();
     $categoryArray = $catalog->getCategoryArray();
     $this->summ = 0;
     // Массив запросов на обновление количества товаров.
     $updateCountProd = array();
     // Добавляем в массив корзины параметр 'цена товара'.
     if ($adminOrder) {
         $this->email = $adminOrder['user_email'];
         $this->phone = $adminOrder['phone'];
         $this->address = $adminOrder['address'];
         $this->delivery = $adminOrder['delivery_id'];
         $this->delivery_cost = $adminOrder['delivery_cost'];
         $this->payment = $adminOrder['payment_id'];
         $this->fio = $adminOrder['user_email'];
         $formatedDate = date('Y-m-d H:i:s');
         // Форматированная дата ГГГГ-ММ-ДД ЧЧ:ММ:СС.
         foreach ($adminOrder['order_content'] as $item) {
             $product = $itemPosition->getProduct($item['id']);
             $_SESSION['couponCode'] = $item['coupon'];
             $productUrl = $product['category_url'] . '/' . $product['url'];
             $itemCount = $item['count'];
             if (!empty($product)) {
                 $product['price'] = $item['price'];
                 $product['price'] = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product);
                 $discount = 100 - $product['price'] * 100 / $item['price'];
                 $productPositions[] = array('id' => $product['id'], 'name' => $item['title'], 'url' => $productUrl, 'code' => $item['code'], 'price' => $product['price'], 'count' => $itemCount, 'property' => $item['property'], 'coupon' => $_SESSION['couponCode'], 'discount' => $discount, 'info' => $this->info);
                 $this->summ += $product['price'] * $itemCount;
                 $product['count'] = $product['count'] - $itemCount >= 0 ? $product['count'] - $itemCount : 0;
                 // По ходу формируем массив запросов на обновление количества товаров.
                 $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($product['count']) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0";
             }
         }
     } elseif (!empty($_SESSION['cart'])) {
         foreach ($_SESSION['cart'] as $item) {
             $product = $itemPosition->getProduct($item['id']);
             // Дописываем к массиву продуктов данные о выбранных характеристиках из корзины покупок, чтобы приплюсовать к сумме заказа.
             if ($item['id'] == $product['id']) {
                 $product['property_html'] = $item['propertyReal'];
             }
             $variant = null;
             if (!empty($item['variantId']) && $item['id'] == $product['id']) {
                 $variants = $itemPosition->getVariants($product['id']);
                 $variant = $variants[$item['variantId']];
                 $product['price'] = $variant['price'];
                 $product['price'] = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product);
                 $product['code'] = $variant['code'];
                 $product['count'] = $variant['count'];
                 $product['title'] .= " " . $variant['title_variant'];
                 //По ходу формируем массив запросов на обновление количества товаров
                 $resCount = $variant['code'];
                 $resCount = $variant['count'] - $item['count'] >= 0 ? $variant['count'] - $item['count'] : 0;
                 $updateCountProd[] = "UPDATE `" . PREFIX . "product_variant` SET `count`= " . DB::quote($resCount) . " WHERE `id`=" . DB::quote($item['variantId']) . " AND `count`>0";
             }
             $productUrl = $product['category_url'] . '/' . $product['url'];
             // Eсли куки не актуальны исключает попадание несуществующего продукта в заказ
             if (!empty($product)) {
                 $product['price'] = SmalCart::plusPropertyMargin($product['price'], $product['property_html']);
                 $tempPrice = $product['price'];
                 $product['price'] = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product);
                 $discount = 100 - $product['price'] * 100 / $tempPrice;
                 $productPositions[] = array('id' => $product['id'], 'name' => $product['title'], 'url' => $productUrl, 'code' => $product['code'], 'price' => $product['price'], 'count' => $item['count'], 'property' => $item['property'], 'coupon' => $_SESSION['couponCode'], 'discount' => $discount, 'info' => $this->info);
                 $this->summ += $product['price'] * $item['count'];
                 if (!$resCount) {
                     $resCount = $product['count'] - $item['count'] >= 0 ? $product['count'] - $item['count'] : 0;
                 }
                 //По ходу формируем массив запросов на обновление количества товаров
                 $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($resCount) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0";
                 $resCount = null;
             }
         }
     }
     // Сериализует данные в строку для записи в бд.
     $orderContent = addslashes(serialize($productPositions));
     // Сериализует данные в строку для записи в бд информации об юридическом лице.
     $yurInfo = '';
     if (!empty($adminOrder['yur_info'])) {
         $yurInfo = addslashes(serialize($adminOrder['yur_info']));
     }
     if (!empty($_POST['yur_info'])) {
         $yurInfo = addslashes(serialize($_POST['yur_info']));
     }
     // Создает новую модель корзины, чтобы узнать сумму заказа.
     $cart = new Models_Cart();
     // Генерируем уникальный хэш для подтверждения заказа.
     $hash = $this->_getHash($this->email);
     // Формируем массив параметров для SQL запроса.
     $array = array('user_email' => $this->email, 'summ' => $this->summ, 'order_content' => $orderContent, 'phone' => $this->phone, 'address' => $this->address, 'delivery_id' => $this->delivery, 'delivery_cost' => $this->delivery_cost, 'payment_id' => $this->payment, 'paided' => '0', 'status_id' => '0', 'confirmation' => $hash, 'yur_info' => $yurInfo, 'name_buyer' => $this->fio);
     // Если заказ оформляется через админку.
     if ($adminOrder) {
         $array['comment'] = $adminOrder['comment'];
         $array['status_id'] = $adminOrder['status_id'];
         $array['add_date'] = $formatedDate;
         DB::buildQuery("INSERT INTO `" . PREFIX . "order` SET ", $array);
     } else {
         // Отдает на обработку  родительской функции buildQuery.
         DB::buildQuery("INSERT INTO `" . PREFIX . "order` SET add_date = now(), ", $array);
     }
     // Заказ номер id добавлен в базу.
     $id = null;
     $id = DB::insertId();
     unset($_SESSION['couponCode']);
     // Ссылка для подтверждения заказа
     $link = 'ссылке <a href="' . SITE . '/order?sec=' . $hash . '&id=' . $id . '" target="blank">' . SITE . '/order?sec=' . $hash . '&id=' . $id . '</a>';
     $table = "";
     // Формирование тела письма.
     if ($id) {
         // Уменьшаем количество купленных товаров
         if (!empty($updateCountProd)) {
             foreach ($updateCountProd as $sql) {
                 DB::query($sql);
             }
         }
         // Если заказ создался, то уменьшаем количество товаров на складе.
         $settings = MG::get('settings');
         $delivery = $this->getDeliveryMethod(false, $this->delivery);
         $sitename = $settings['sitename'];
         $currency = MG::getSetting('currency');
         $subj = 'Оформлена заявка №' . $id . ' на сайте ' . $sitename;
         $subj = str_replace('№', '#', $subj);
         if ($this->fio) {
             $table .= '<br/><b>Покупатель:</b> ' . $this->fio;
         }
         $table .= '<br/><b>E-mail:</b> ' . $this->email;
         $table .= '<br/><b>Тел:</b> ' . $this->phone;
         if ($this->address) {
             $table .= '<br/><b>Адрес:</b> ' . $this->address;
         }
         $table .= '<br/><b>Доставка:</b> ' . $delivery['description'];
         $paymentArray = $this->getPaymentMethod($this->payment);
         $table .= '<br/><b>Оплата:</b> ' . $paymentArray['name'];
         $table .= '
     <style>
       table {border: 4px double black;border-collapse: collapse;}
       th {text-align: left;background: #ccc;padding: 5px;border: 1px solid black;}
       td {padding: 5px;border: 1px solid black;}
     </style>';
         $table .= '<br><br><table>';
         if (!empty($_SESSION['cart']) || $adminOrder) {
             $table .= '
         <tr>
           <th>Наименование товара</th>
           <th>Артикул</th>
           <th>Стоимость</th>
           <th>Количество</th>
         </tr>';
             foreach ($productPositions as $product) {
                 $product['property'] = htmlspecialchars_decode(str_replace('&amp;', '&', $product['property']));
                 $table .= '
         <tr>
           <td>' . $product['name'] . $product['property'] . '</td>
           <td>' . $product['code'] . '</td>
           <td>' . $product['price'] . ' ' . $currency . '</td>
           <td>' . $product['count'] . ' шт.</td>
         </tr>';
             }
         }
         $table .= '</table>';
         $table .= '<br><b>Итого:</b> ' . $this->summ . ' ' . $currency;
         $table .= '<br/><b>Стоимость доставки:</b> ' . $this->delivery_cost . " " . $currency;
         $totalSumm = $this->delivery_cost + $this->summ;
         $table .= '<br/><b>Всего к оплате:</b> <span style="color:red">' . $totalSumm . ' ' . $currency . '</span>';
         $msg = MG::getSetting('orderMessage') . '<br><u>Обязательно подтвердите</u> свой заказ, перейдя по ' . $link . '.<br>' . $table;
         $msg = str_replace('#ORDER#', $id, $msg);
         $msg = str_replace('#SITE#', $sitename, $msg);
         $msg = str_replace('№', '#', $msg);
         $mails = explode(',', MG::getSetting('adminEmail'));
         // Отправка заявки админам.
         // Дополнительная информация для админов.
         $msgAdmin .= '<br/><br/><b>Покупатель перешел к нам на сайт из: </b><br/>' . $_SESSION['lastvisit'] . '<br/><br/><b>Покупатель впервые перешел к нам на сайт из: </b><br/>' . $_SESSION['firstvisit'];
         foreach ($mails as $mail) {
             if (preg_match('/^[-._a-z0-9]+@(?:[a-z0-9][-a-z0-9]+\\.)+[a-z]{2,6}$/', $mail)) {
                 Mailer::addHeaders(array("Reply-to" => $this->email));
                 Mailer::sendMimeMail(array('nameFrom' => $this->fio, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $sitename, 'emailTo' => $mail, 'subject' => $subj, 'body' => $msg . $msgAdmin, 'html' => true));
             }
         }
         // Добавление в тело письма ссылки для задания пароля.
         $msg .= '<br>Подтвердите свой заказ, перейдя по ' . $link;
         // Отправка заявки пользователю.
         Mailer::sendMimeMail(array('nameFrom' => $sitename, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $this->fio, 'emailTo' => $this->email, 'subject' => $subj, 'body' => $msg, 'html' => true));
         // Если заказ успешно записан, то очищает корзину.
         if (!$adminOrder) {
             $cart->clearCart();
         }
     }
     // Возвращаем номер созданого заказа.
     $args = func_get_args();
     return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $id, $args);
 }
示例#12
0
 public function __construct()
 {
     $aUri = URL::getSections();
     $settings = MG::get('settings');
     // Если нажата кнопка купить.
     $_REQUEST['category_id'] = URL::getQueryParametr('category_id');
     if (!empty($_REQUEST['inCartProductId'])) {
         $cart = new Models_Cart();
         $property = $cart->createProperty($_POST);
         $cart->addToCart($_REQUEST['inCartProductId'], $_REQUEST['amount_input'], $property);
         SmalCart::setCartData();
         MG::redirect('/cart');
     }
     $countСatalogProduct = $settings['countСatalogProduct'];
     // Показать первую страницу выбранного раздела.
     $page = 1;
     // Запрашиваемая страница.
     if (isset($_REQUEST['p'])) {
         $page = $_REQUEST['p'];
     }
     $sortType = 'desc';
     $countGoods = $settings['countСatalogProduct'];
     $isStock = 0;
     // Обработка GET параметров
     if (isset($_GET['count'])) {
         switch ($_GET['count']) {
             case 8:
                 $countGoods = 8;
                 break;
             case 12:
                 $countGoods = 12;
                 break;
             case 16:
                 $countGoods = 16;
                 break;
             default:
                 $countGoods = 8;
                 break;
         }
     }
     if (isset($_GET['sort'])) {
         switch ($_GET['sort']) {
             case 'priceDesc':
                 $sortType = 'desc';
                 break;
             case 'priceAsc':
                 $sortType = 'asc';
                 break;
             case 'comments':
                 $sortType = 'comments';
                 break;
             case 'popular':
                 $sortType = 'popular';
                 break;
             default:
                 $sortType = 'desc';
                 break;
         }
     }
     if (isset($_GET['stock'])) {
         if ($_GET['stock'] == 1) {
             $isStock = 1;
         } else {
             $isStock = 0;
         }
     }
     $model = new Models_Catalog();
     $isMainCat = TRUE;
     $subCat = MG::get('category')->getCategoryList($_REQUEST['category_id']);
     if (empty($subCat)) {
         $isMainCat = FALSE;
     }
     // Если происходит поиск по ключевым словам.
     $keyword = URL::getQueryParametr('search');
     if (!empty($keyword)) {
         $items = $model->getListProductByKeyWord($keyword, false, false, false, $sortType, $isStock, $countGoods);
         $searchData = array('keyword' => $keyword, 'count' => $items['numRows']);
     } else {
         if ($isMainCat) {
             $model->categoryId = MG::get('category')->getCategoryList($_REQUEST['category_id']);
             $model->categoryId[] = $_REQUEST['category_id'];
             $subCatList = $model->getChildCat();
             if (!empty($subCatList)) {
                 $productList = $model->getMainCatProduct($subCatList);
                 $catList = $model->getMainCatInfo($subCatList);
                 $i = 0;
                 foreach ($catList as $cat) {
                     foreach ($productList as $prd) {
                         if ($prd['cat_id'] == $cat['id']) {
                             $imagesUrl = explode("|", $prd['image_url']);
                             if (!empty($imagesUrl[0])) {
                                 $prd['image_url'] = $imagesUrl[0];
                             }
                             $catList[$i]['items'][] = $prd;
                         }
                     }
                     $i++;
                 }
             }
         } else {
             // Получаем список вложенных категорий, для вывода всех продуктов, на страницах текущей категории.
             $model->categoryId = MG::get('category')->getCategoryList($_REQUEST['category_id']);
             // В конец списка, добавляем корневую текущую категорию.
             $model->categoryId[] = $_REQUEST['category_id'];
             $items = $model->getList($countGoods, false, true, $sortType, $isStock);
         }
     }
     $settings = MG::get('settings');
     if (!$isMainCat) {
         foreach ($items['catalogItems'] as $item) {
             $productIds[] = $item['id'];
         }
         $product = new Models_Product();
         $blocksVariants = $product->getBlocksVariantsToCatalog($productIds);
         foreach ($items['catalogItems'] as $k => $item) {
             $items['catalogItems'][$k]["recommend"] = 0;
             $items['catalogItems'][$k]["new"] = 0;
             $imagesUrl = explode("|", $item['image_url']);
             $items['catalogItems'][$k]["image_url"] = "";
             if (!empty($imagesUrl[0])) {
                 $items['catalogItems'][$k]["image_url"] = $imagesUrl[0];
             }
             $items['catalogItems'][$k]['title'] = MG::modalEditor('catalog', $item['title'], 'edit', $item["id"]);
             // Формируем варианты товара.
             if ($item['variant_exist']) {
                 // Легкая форма без характеристик.
                 $liteFormData = $product->createPropertyForm($param = array('id' => $item['id'], 'maxCount' => $item['count'], 'productUserFields' => null, 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => array(), 'noneAmount' => true, 'titleBtn' => "В корзину", 'blockVariants' => $blocksVariants[$item['id']]));
                 $items['catalogItems'][$k]['liteFormData'] = $liteFormData['html'];
             }
         }
     }
     $categoryDesc = MG::get('category')->getDesctiption($_REQUEST['category_id']);
     if ($_REQUEST['category_id']) {
         $categoryDesc = MG::inlineEditor(PREFIX . 'category', "html_content", $_REQUEST['category_id'], $categoryDesc);
     }
     if ($isMainCat) {
         $data = array('titeCategory' => $model->currentCategory['title'], 'cat_desc' => $categoryDesc, 'meta_title' => !empty($model->currentCategory['meta_title']) ? $model->currentCategory['meta_title'] : $model->currentCategory['title'], 'meta_keywords' => !empty($model->currentCategory['meta_keywords']) ? $model->currentCategory['meta_keywords'] : "товары,продукты,изделия", 'meta_desc' => !empty($model->currentCategory['meta_desc']) ? $model->currentCategory['meta_desc'] : "В каталоге нашего магазина есть все.", 'is_main_cat' => $isMainCat, 'category_info' => $catList, 'currency' => MG::getSetting('currency'), 'id_category' => $model->getCurrentId(), 'searchData' => empty($searchData) ? '' : $searchData);
     } else {
         $data = array('items' => $items['catalogItems'], 'titeCategory' => $model->currentCategory['title'], 'cat_desc' => $categoryDesc, 'pager' => $items['pager'], 'searchData' => empty($searchData) ? '' : $searchData, 'meta_title' => !empty($model->currentCategory['meta_title']) ? $model->currentCategory['meta_title'] : $model->currentCategory['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'], 'actionButton' => MG::getSetting('actionInCatalog') === "true" ? 'actionBuy' : 'actionView', 'is_main_cat' => $isMainCat, 'id_category' => $model->getCurrentId());
     }
     if ($keyword) {
         $data['meta_title'] = 'Поиск по фразе: ' . $keyword;
     }
     $this->data = $data;
     if ($aUri[1] == 'catalog' && empty($aUri[2]) && empty($_GET['search'])) {
         MG::redirect('/');
     }
 }