/** * Производит sql запрос и устанавливает параметры. * @param type $sql - запрос к базе * @param type $numberPage - номер запрашиваемой страницы * @param type $countRecord - количество выводимых записаей на одной странице * @param type $linkCount - количесво выводимых ссылок в педжере * @param type $viewAll - вывести все страницы * @param type $paramName - наименование гет переменной указывающей текущую страницу */ public function __construct($sql, $numberPage, $countRecord = 20, $linkCount = 6, $viewAll = false, $paramName = "page") { // Инициализируем переменные класса $this->sql = $sql; $this->countRecord = $countRecord; $this->numberPage = $numberPage; $this->viewAll = $viewAll; $this->paramName = $paramName; //количество ссылок не может быть меньше двух $this->linkCount = $linkCount == 1 ? 2 : $linkCount; //$this->returnData = Storage::get(md5($sql.$numberPage)); //if($this->returnData == null){ // если не запроcе вывод всего списка записей if (!$this->viewAll) { //вычисляем данные для педжера $this->calcDataPage(); } // выполняем запрос $res = DB::query($this->sql); // сохраняем все полученные записи while ($row = DB::fetchAssoc($res)) { $this->returnData[] = $row; } // Storage::save(md5($sql.$numberPage),$this->returnData); //} }
static function getProduct($count) { $res = DB::query('SELECT DISTINCT p.id, CONCAT(c.parent_url,c.url) as category_url, p.url as product_url, p.*, v.views, pv.product_id as variant_exist FROM `' . PREFIX . self::$pluginName . '_visits` v INNER JOIN `' . PREFIX . 'product` p ON v.id_product = p.id LEFT JOIN `' . PREFIX . 'category` c ON c.id = p.cat_id LEFT JOIN `' . PREFIX . 'product_variant` pv ON p.id = pv.product_id LEFT JOIN ( SELECT pv.product_id, SUM( pv.count ) AS varcount FROM `' . PREFIX . 'product_variant` AS pv GROUP BY pv.product_id ) AS temp ON p.id = temp.product_id ORDER BY v.views DESC LIMIT ' . $count . ''); if (DB::numRows($res) != 0) { while ($row = DB::fetchAssoc($res)) { if ($row['image_url']) { $img = explode('|', $row['image_url']); $row['image_url'] = $img[0]; } $array[] = $row; } return $array; } }
/** * Выводит страницу настроек плагина в админке */ static function pageSettingsPlugin() { $lang = self::$lang; $locale = self::$locale; $pluginName = self::$pluginName; //получаем опцию pozvonimOption в переменную option $option = MG::getSetting('pozvonimOption'); if (!$option) { $option = addslashes(serialize(array())); } $option = stripslashes($option); $options = unserialize($option); $result = DB::query("SELECT `option`, `value` FROM `" . PREFIX . "setting` "); $settings = array(); while ($row = DB::fetchAssoc($result)) { $settings[$row['option']] = $row['value']; } if (!isset($settings['shopPhone'])) { $settings['shopPhone'] = ''; } else { $settings['shopPhone'] = '+' . preg_replace('/[^0-9]+/', '', trim($settings['shopPhone'])); } self::preparePageSettings(); include 'pageplugin.php'; }
public function sendOrderToPayment() { $id = USER::getThis()->id; $data = array('noparnter' => true); $result = DB::query(' SELECT * FROM `' . PREFIX . 'partner` WHERE `user_id` = ' . DB::quote($id)); if ($row = DB::fetchAssoc($result)) { $data = $row; $sitename = MG::getSetting('sitename'); $subj = 'Партнер #' . $row['id'] . ' на сайте ' . $sitename . ' хочет получить выплату'; $msg = 'Партнер #' . $row['id'] . ' на сайте ' . $sitename . ' хочет получить выплату в размере <b>' . $_POST['summ'] . ' рублей.</b> <br/> Воспользуйтесь <a href="' . SITE . '/mg-admin">панелью администрирования</a>, чтобы проверить информацию о партнере и его заработке.'; //если ответил пользователь то письма отправляются админам $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-z0-9_]+)$/', $mail)) { Mailer::addHeaders(array("Reply-to" => $this->email)); Mailer::sendMimeMail(array('nameFrom' => USER::getThis()->sname . " " . USER::getThis()->name, 'emailFrom' => USER::getThis()->email, 'nameTo' => $sitename, 'emailTo' => $mail, 'subject' => $subj, 'body' => $msg, 'html' => true)); } } //оповещение на мыло партнера Mailer::sendMimeMail(array('nameFrom' => $sitename, 'emailFrom' => "noreply@" . $sitename, 'nameTo' => USER::getThis()->sname . " " . USER::getThis()->name, 'emailTo' => USER::getThis()->email, 'subject' => 'Отправлена заявка на получение партнерской выплаты на сайте ' . $sitename, 'body' => 'Вами была отправлена заявка на получение партнерской выплаты на сайте ' . $sitename . ' в размере <b>' . $_POST['summ'] . ' рублей.</b> <br/>Пожалуйста, дождитесь пока мы свяжемся с Вами по электронной почте для учтонения способов перевода денежных средств. <br/>Данное письмо сформированно роботом, отвечать на него не надо.', 'html' => true)); } return true; }
static function getNewGoods($count) { $res = DB::query('SELECT DISTINCT p.id, CONCAT(c.parent_url,c.url) as category_url, p.url as product_url, p.*, pv.product_id as variant_exist FROM `' . PREFIX . 'product` p LEFT JOIN `' . PREFIX . 'category` c ON c.id = p.cat_id LEFT JOIN `' . PREFIX . 'product_variant` pv ON p.id = pv.product_id LEFT JOIN ( SELECT pv.product_id, SUM( pv.count ) AS varcount FROM `' . PREFIX . 'product_variant` AS pv GROUP BY pv.product_id ) AS temp ON p.id = temp.product_id WHERE new = 1 LIMIT ' . $count . ''); if (DB::numRows($res) != 0) { while ($row = DB::fetchAssoc($res)) { if ($row['image_url']) { $img = explode('|', $row['image_url']); $row['image_url'] = $img[0]; } $array[] = $row; } return $array; } }
private function isIssetImg($id) { $res = DB::query("SELECT * FROM `" . PREFIX . $this->pluginName . "` WHERE id_cat = " . $id . ""); $arr = DB::fetchAssoc($res); if (!empty($arr)) { return TRUE; } }
private function getCountSlide() { $sql = "SELECT count(id) as count FROM `" . PREFIX . $this->pluginName . "`"; $res = DB::query($sql); if ($count = DB::fetchAssoc($res)) { return $count['count'] + 1; } }
/** * Получает текущий токен */ static function getToken() { $token = ""; $res = DB::query(" SELECT `value` FROM `" . PREFIX . "sms_setting` WHERE `id`= 2"); if ($row = DB::fetchAssoc($res)) { $token = $row['value']; } return $token; }
static function getEntity() { $res = DB::query("\n\t\t\tSELECT * FROM `" . PREFIX . self::$pluginName . "` WHERE invisible = 1 ORDER BY `sort` ASC\n\t\t"); if (DB::numRows($res) != 0) { while ($row = DB::fetchAssoc($res)) { $array[] = $row; } return $array; } }
static function getOption($name) { $res = DB::query("\n\t\t\tSELECT value FROM `" . PREFIX . self::$pluginName . "` WHERE `option` = '{$name}'\n\t\t"); if (DB::numRows($res) != 0) { while ($row = DB::fetchAssoc($res)) { $array[] = $row; } return $array[0]['value']; } }
/** * Получает из БД запись рейтинга по id товара */ static function getEntity($id) { $result = array(); $sql = "SELECT * FROM `" . PREFIX . "product_" . self::$pluginName . "` WHERE `id_product` = " . $id . ";"; $result = DB::query($sql); while ($row = DB::fetchAssoc($result)) { $array[] = $row; } return $array; }
private function getComments() { $result = array(); // Если запрос был со стороны сайта выполняется первая ветка условия. Иначе - вторая. if (isset($_POST['showComments']) && isset($_POST['uri'])) { $uri = explode('/', $_POST['uri']); if (!empty($uri[1])) { unset($uri[0]); $uri = implode('/', $uri); } else { $uri = $uri[0]; } // Запрос для генерации блока пагинации $sql = "\n\t\t\t\tSELECT id, name, comment, UNIX_TIMESTAMP(date) as date\n\t\t\t\tFROM `comments` \n\t\t\t\tWHERE uri = " . DB::quote($uri) . " AND approved = '1'\n\t\t\t\tORDER BY `id` DESC"; $res = DB::query($sql); //Получаем блок пагинации if ($_POST["page"]) { $page = $_POST["page"]; } //если был произведен запрос другой страницы, то присваиваем переменной новый индекс $navigator = new Navigator($sql, $page, MG::getOption('countPrintRowsComments')); //определяем класс $pagination = $navigator->getPager('forAjax'); /* Получаем непосредственно комментарии. Если была запрошена не первая страница комментариев, выполняем вторую ветку условия. */ if (empty($_POST['page'])) { $sql = "\n\t\t\t\tSELECT id, name, comment, UNIX_TIMESTAMP(date) as date\n\t\t\t\tFROM `comments` \n\t\t\t\tWHERE uri = " . DB::quote($uri) . " AND approved = '1'\n\t\t\t\tORDER BY `id` DESC\n\t\t\t\tLIMIT 0, " . MG::getOption('countPrintRowsComments'); $res = DB::query($sql); } else { $start = ($_POST['page'] - 1) * MG::getOption('countPrintRowsComments'); $amount = MG::getOption('countPrintRowsComments'); $sql = "\n\t\t\t\tSELECT id, name, comment, UNIX_TIMESTAMP(date) as date\n\t\t\t\tFROM `comments` \n\t\t\t\tWHERE uri = " . DB::quote($uri) . " AND approved = '1'\n\t\t\t\tORDER BY `id` DESC\n\t\t\t\tLIMIT " . $start . ", " . $amount; $res = DB::query($sql); } while ($row = DB::fetchAssoc($res)) { $row['date'] = date('d.m.Y H:i', $row['date']); $result['comments'][] = $row; } $result['pagination'] = $pagination; echo json_encode($result); exit; } else { $sql = "\n\t\t\t\tSELECT id, name, comment, date\n\t\t\t\tFROM `comments`\n\t\t\t\tORDER BY date DESC"; $res = DB::query($sql); while ($row = DB::fetchAssoc($res)) { $row['date'] = date('d.m.Y H:i', $row['date']); $result[$row['id']] = $row; } return $result; } }
static function getImgCat($id) { if (!empty($id)) { $res = DB::query("SELECT * FROM `" . PREFIX . self::$pluginName . "` WHERE `id_cat`=" . $id); if (DB::numRows($res) > 0) { $arr = DB::fetchAssoc($res); if (!empty($arr['img'])) { return PLUGIN_DIR . self::$pluginName . '/img/' . $arr['img']; } } } else { echo 'Не указан обязательный атрибут id'; } }
public function getEntity() { $res = DB::query(' SELECT * FROM `' . PREFIX . $this->pluginName . '` WHERE `id` = ' . DB::quote($_POST['id']) . ' ORDER BY sort ASC'); if ($row = DB::fetchAssoc($res)) { $this->data = $row; return true; } else { return false; } return false; }
/** * Получает параметры способа доставки по его id. * * @param string $url запрашиваемой категории. * @return array массив с данными о категории. * */ public function getDeliveryById($id) { $result = array(); $res = DB::query(' SELECT * FROM `' . PREFIX . 'delivery` WHERE id = ' . DB::quote($id)); if (!empty($res)) { if ($deliv = DB::fetchAssoc($res)) { $result = $deliv; } } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Получаем запись из БД плагина, если существует запись к данному товару * @return массив, если существует, если нет то вызываем функцию добавления. */ public function getEntity() { $this->addCookie($_POST['id_product']); $res = DB::query(' SELECT * FROM `' . PREFIX . "product_" . $this->pluginName . '` WHERE `id_product` = ' . DB::quote($_POST['id_product'])); if ($row = DB::fetchAssoc($res)) { $this->updateEntity(array('id' => $row['id'], 'id_product' => $row['id_product'], 'rating' => $row['rating'] + $_POST['rating'], 'count' => $row['count'] + $_POST['count'])); } else { $this->addEntity(array('id_product' => $_POST['id_product'], 'rating' => $_POST['rating'], 'count' => $_POST['count'])); } $result = DB::query(' SELECT * FROM `' . PREFIX . "product_" . $this->pluginName . '` WHERE `id_product` = ' . DB::quote($_POST['id_product'])); if ($row = DB::fetchAssoc($result)) { $this->data['row'] = $row; return true; } return false; }
/** * Полученнияе статистики заказов за выбранный период. * @param $dateFrom дата "от". * @param $dateTo дата "До". * @return array */ public function getStatisticPeriod($dateFrom, $dateTo) { $dateFromRes = $dateFrom; $dateToRes = $dateTo; $dateFrom = date('Y-m-d', strtotime($dateFrom)); $dateTo = date('Y-m-d', strtotime($dateTo)); $period = "AND `add_date` >= " . DB::quote($dateFrom) . "\r\n AND `add_date` <= " . DB::quote($dateTo); // Количество закрытых заказов всего. $ordersCount = $this->getOrderCount('WHERE status_id = 5 ' . $period); $noclosed = $this->getOrderCount('WHERE status_id <> 5 ' . $period); // Cумма заработанная за все время работы магазина. $res = DB::query("\r\n SELECT sum(summ) as 'summ' FROM `" . PREFIX . "order`\r\n WHERE status_id = 5 " . $period); if ($row = DB::fetchAssoc($res)) { $summ = $row['summ']; } $product = new Models_Product(); $productsCount = $product->getProductsCount(); $res = DB::query("SELECT id FROM `" . PREFIX . "user`"); $usersCount = DB::numRows($res); $result = array('from_date_stat' => $dateFromRes, 'to_date_stat' => $dateToRes, "orders" => $ordersCount ? $ordersCount : "0", "noclosed" => $noclosed ? $noclosed : "0", "summ" => $summ ? $summ : "0", "users" => $usersCount ? $usersCount : "0", "products" => $productsCount ? $productsCount : "0"); return $result; }
/** * Создает свойства продукта * @param type $key = Название характеристики * @param type $value = Значание * @param type $categoryId = Категория * @param type $productId = Продукт * @return type */ function createProperty($key, $value, $categoryId, $productId) { if (empty($key)) { return false; } // 0. Очистим продукт от всех ранее имеющихся свойств $propertyId = ''; // 1. Проверяем, существует такая характеристика у данной категории? $res = DB::query('SELECT * FROM `' . PREFIX . 'property` LEFT JOIN `' . PREFIX . 'category_user_property` as `cup` ON `cup`.`property_id`=`' . PREFIX . 'property`.`id` WHERE `name` = ' . DB::quote($key)); $row = DB::fetchAssoc($res); if (empty($row)) { // если нет характеристики до создадим ее DB::query(' INSERT INTO `' . PREFIX . 'property` (`name`, `type`, `activity`) VALUES (' . DB::quote($key) . ',"string",1)'); $propertyId = DB::insertId(); // установка сортировки DB::query('UPDATE `' . PREFIX . 'property` SET `sort` = ' . DB::quote($propertyId) . ' WHERE `id` = ' . DB::quote($propertyId)); } else { // если найдена уже характеристика, получаем ее id $propertyId = $row['id']; // добавляем привязку, если ее небыло раньше, для действующей категории $res = DB::query(' SELECT * FROM `' . PREFIX . 'category_user_property` WHERE `property_id` = ' . DB::quote($propertyId) . ' AND `category_id` = ' . DB::quote($categoryId)); $rowCup = DB::fetchAssoc($res); if (empty($rowCup)) { DB::query(' INSERT INTO `' . PREFIX . 'category_user_property` (`category_id`, `property_id`) VALUES (' . DB::quote($categoryId) . ',' . DB::quote($propertyId) . ')'); } } // 2. Привязываем к продукту $res = DB::query(' SELECT * FROM `' . PREFIX . 'product_user_property` WHERE `property_id` = ' . DB::quote($propertyId) . ' AND `product_id` = ' . DB::quote($productId)); $row = DB::fetchAssoc($res); if (empty($row)) { DB::query(' INSERT INTO `' . PREFIX . 'product_user_property` (`product_id`, `property_id`, `value`) VALUES (' . DB::quote($productId) . ',' . DB::quote($propertyId) . ',' . DB::quote($value) . ')'); } else { DB::query(' UPDATE `' . PREFIX . 'product_user_property` SET `value` = ' . DB::quote($value) . ' WHERE `product_id` = ' . DB::quote($productId) . ' AND `property_id` = ' . DB::quote($propertyId)); } // 3. Привязываем к категории $res = DB::query(' SELECT * FROM `' . PREFIX . 'category_user_property` WHERE `property_id` = ' . DB::quote($propertyId)); $row = DB::fetchAssoc($res); if (empty($row)) { // если нет характеристики до создадим ее DB::query(' INSERT INTO `' . PREFIX . 'category_user_property` (`category_id`, `property_id`) VALUES (' . DB::quote($categoryId) . ',' . DB::quote($propertyId) . ')'); } }
/** * Вычисляет общую стоимость содержимого, а также количество. * @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('&', '&', $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); }
public function getCommentById() { $res = DB::query("SELECT * FROM `" . PREFIX . "comments` WHERE id = " . DB::quote($_POST['id'])); $this->data = DB::fetchAssoc($res); return true; }
/** * Получает параметры заказа */ public function getOrderData() { $model = new Models_Order(); $orderData = $model->getOrder(" id = " . DB::quote($_POST['id'])); $orderData = $orderData[$_POST['id']]; if ($orderData['number'] == '') { $orderData['number'] = $orderData['id']; DB::query("UPDATE `" . PREFIX . "order` SET `number`= " . DB::quote($orderData['number']) . " WHERE `id`=" . DB::quote($orderData['id']) . ""); } $orderData['yur_info'] = unserialize(stripslashes($orderData['yur_info'])); $orderData['order_content'] = unserialize(stripslashes($orderData['order_content'])); // Запрос для проверки, существует ли система скидок $percent = false; $discountSyst = false; $res = DB::query('SELECT * FROM `' . PREFIX . 'plugins` WHERE `folderName` = "discount-system"'); $act = DB::fetchArray($res); $result = DB::query('SHOW TABLES LIKE "' . PREFIX . 'discount-system%"'); if (DB::numRows($result) == 2 && $act['active']) { $percent = 0; $discountSyst = true; } if (!empty($orderData['order_content'])) { $product = new Models_Product(); foreach ($orderData['order_content'] as &$item) { foreach ($item as &$v) { $v = rawurldecode($v); } } foreach ($orderData['order_content'] as &$items) { $res = $product->getProduct($items['id']); $items['image_url'] = $res['image_url']; $items['property'] = htmlspecialchars_decode(str_replace('&', '&', $items['property'])); $response['discount'] = $items['discount']; $percent = $items['discount']; $items['maxCount'] = $res['count']; $variants = DB::query("SELECT `id`, `count` FROM `" . PREFIX . "product_variant`\n WHERE `product_id`=" . DB::quote($items['id']) . " AND `code`=" . DB::quote($items['code'])); if ($variant = DB::fetchAssoc($variants)) { $items['variant'] = $variant['id']; $items['maxCount'] = $variant['count']; } } } //заменить на получение скидки $codes = array(); // Запрос для проверки , существуют ли промокоды. $result = DB::query('SHOW TABLES LIKE "' . PREFIX . 'promo-code"'); if (DB::numRows($result)) { $res = DB::query('SELECT * FROM `' . PREFIX . 'plugins` WHERE `folderName` = "promo-code"'); $act = DB::fetchArray($res); if ($act['active']) { $res = DB::query('SELECT code, percent FROM `' . PREFIX . 'promo-code` WHERE invisible = 1 AND now() >= `from_datetime` AND now() <= `to_datetime`'); while ($code = DB::fetchAssoc($res)) { $codes[] = $code['code']; if ($code['code'] == $orderData['order_content'][0]['coupon']) { $percent = $percent == 0 ? $code['percent'] : $percent; } } } } $response['order'] = $orderData; $response['order']['discountsSystem'] = $discountSyst; $response['order']['discontPercent'] = $percent; $response['order']['promoCodes'] = $codes; $response['order']['date_delivery'] = $orderData['date_delivery'] ? date('d.m.Y', strtotime($orderData['date_delivery'])) : ''; $deliveryArray = $model->getDeliveryMethod(); $response['deliveryArray'] = $deliveryArray; $paymentArray = array(); $i = 1; while ($payment = $model->getPaymentMethod($i)) { $paymentArray[$i] = $payment; $i++; } $response['paymentArray'] = $paymentArray; $this->data = $response; return true; }
/** * Регистрация на сайте и в таблице uLogin * @param Array $u_user - данные о пользователе, полученные от uLogin * @param int $in_db - при значении 1 необходимо переписать данные в таблице uLogin * @return bool|int|Error */ function ulogin_registration_user($u_user, $in_db = 0) { if (!isset($u_user['email'])) { die("Через данную форму выполнить вход/регистрацию невозможно. </br>" . "Сообщиете администратору сайта о следующей ошибке: </br></br>" . "Необходимо указать <b>email</b> в возвращаемых полях <b>uLogin</b>"); } $u_user['network'] = isset($u_user['network']) ? $u_user['network'] : ''; $u_user['phone'] = isset($u_user['phone']) ? $u_user['phone'] : ''; // данные о пользователе есть в ulogin_table, но отсутствуют в Базе if ($in_db == 1) { DB::query("DELETE FROM " . PREFIX . "ulogin WHERE `identity` = " . DB::quote($u_user['identity'])); } $user_id = USER::getUserInfoByEmail($u_user['email']); $user_id = $user_id->id; // $check_m_user == true -> есть пользователь с таким email $check_m_user = $user_id > 0 ? true : false; $current_user = USER::isAuth() ? USER::getThis() : 0; // $isLoggedIn == true -> ползователь онлайн $isLoggedIn = isset($current_user->id) && $current_user->id > 0 ? true : false; if (!$check_m_user && !$isLoggedIn) { // отсутствует пользователь с таким email в базе -> регистрация $date = explode('.', $u_user['bdate']); $insert_user = array('pass' => md5(microtime(true)), 'email' => $u_user['email'], 'role' => 2, 'name' => $u_user['first_name'], 'sname' => $u_user['last_name'], 'address' => '', 'phone' => $u_user['phone'], 'birthday' => $date['2'] . '-' . $date['1'] . '-' . $date['0'], 'activity' => 1); $user_id = USER::add($insert_user); $user_id = DB::insertId(); $userData = USER::getUserById($user_id); $res = DB::query("INSERT INTO " . PREFIX . "ulogin (user_id, identity, network)\n\t\tVALUES (" . DB::quote($user_id) . "," . DB::quote($u_user['identity']) . "," . DB::quote($u_user['network']) . ")"); return $userData->id; } else { // существует пользователь с таким email или это текущий пользователь if (!isset($u_user["verified_email"]) || intval($u_user["verified_email"]) != 1) { die('<head></head><body><script src="//ulogin.ru/js/ulogin.js" type="text/javascript"></script><script type="text/javascript">uLogin.mergeAccounts("' . $_POST['token'] . '")</script>' . "Электронный адрес данного аккаунта совпадает с электронным адресом существующего пользователя. <br>Требуется подтверждение на владение указанным email.</br></br>" . "Подтверждение аккаунта" . "</body>"); } if (intval($u_user["verified_email"]) == 1) { $user_id = $isLoggedIn ? $current_user->id : $user_id; $other_u = DB::query("SELECT identity FROM " . PREFIX . "ulogin where `user_id` = " . DB::quote($user_id)); $other_u = DB::fetchAssoc($other_u); if ($other_u) { if (!$isLoggedIn && !isset($u_user['merge_account'])) { die('<head></head><body><script src="//ulogin.ru/js/ulogin.js" type="text/javascript"></script><script type="text/javascript">uLogin.mergeAccounts("' . $_POST['token'] . '","' . $other_u['identity'] . '")</script>' . "С данным аккаунтом уже связаны данные из другой социальной сети. <br>Требуется привязка новой учётной записи социальной сети к этому аккаунту.<br/>" . "Синхронизация аккаунтов" . "</body>"); } } DB::query("INSERT INTO " . PREFIX . "ulogin (user_id, identity, network)\n\t\t\tVALUES (" . DB::quote($user_id) . "," . DB::quote($u_user['identity']) . "," . DB::quote($u_user['network']) . ")"); return $user_id; } } return false; }
/** * Строит sql запрос для поиска всех id товаров удовлетворяющих фильтру по характеристикам * * @param array $properties массив с ключами переданных массивов с характеристиками * @return array массив id товаров. */ public function getProductIdByFilter($properties) { $result = array(); $propertyData = Storage::get(md5('filterProperty' . $_REQUEST['category_id'])); if ($propertyData == null) { $propertyData = $this->getPropertyData(); Storage::save(md5('filterProperty' . $_REQUEST['category_id']), $propertyData); } $sql = ' SELECT p.id FROM `' . PREFIX . 'product` as p'; foreach ($properties as $id => $property) { if (empty($id) || !is_numeric($id)) { continue; } // если указан параметр по умолчанию из выпадающего спи ска "не выбрано" if (count($property) === 1 && empty($property[0])) { continue; } if ($property[0] == "slider") { if (empty($property[1]) || empty($property[2])) { continue; } $arVal = array_unique(explode('|', trim($propertyData[$id]['allValue'], '|'))); $min = (double) $arVal[0]; // Максимальное значение (назначим 1 значение самым маленьким) $max = (double) $arVal[0]; // Минимальное значение (назначим 1 значение самым большим) foreach ($arVal as $value) { if (!empty($value)) { // Проверми,является ли значение числом if (is_numeric($value)) { // Ищем мин и максимальные значения if ($max < $value) { $max = $value; } else { if ($min > $value) { $min = $value; } } } } } if ($property[1] == $min && $property[2] == $max) { continue; } } $sql .= ' JOIN `' . PREFIX . 'product_user_property` as pup' . $id . ' ON '; foreach ($property as $cnt => $value) { //Если мы уже составляли условие для слайдера, то пропускаем шаг. #ДОБАВЛЕНО if ($property[0] == "slider" && $cnt > 0) { continue; } $value = str_replace('+', '[[.plus-sign.]]', $value); $value = str_replace('*', '[[.asterisk.]]', $value); $value = str_replace('(', '[[.left-parenthesis.]]', $value); $value = str_replace(')', '[[.right-parenthesis.]]', $value); $value = str_replace('?', '[[.question-mark.]]', $value); $sql .= '(pup' . $id . '.product_id = p.id AND '; $sql .= '((pup' . $id . '.property_id = ' . DB::quote($id) . ') AND '; //Проверяем, выводится ли тип характеристика слайдером. #ДОБАВЛЕНО if ($property[0] == "slider") { $sql .= '(pup' . $id . '.value BETWEEN ' . $property[1] . ' AND ' . $property[2] . ' OR pup' . $id . '.value = \'\'))) OR '; continue; } $sql .= '(LCASE(concat("|",pup' . $id . '.value,"|")) REGEXP LCASE("[[.vertical-line.]]' . DB::quote(htmlspecialchars_decode($value), true) . '(#.*#)?[[.vertical-line.]]")))) OR '; } $sql = substr($sql, 0, -4); } $res = DB::query($sql); while ($row = DB::fetchAssoc($res)) { $result[] = $row['id']; } $pIds = implode(',', $result); if (!empty($pIds)) { $sql = ' SELECT pup.property_id, pup.value FROM `' . PREFIX . 'product_user_property` as pup WHERE pup.product_id IN (' . DB::quote($pIds, 1) . ') '; $res = DB::query($sql); while ($row = DB::fetchAssoc($res)) { if ($row['value']) { $partVal = explode('|', $row['value']); foreach ($partVal as $value) { $this->accessValues[$row['property_id']][$value] = preg_replace('~(#.*#)~', '', $value); } } } } return $result; }
/** * Обновляет пользователя учетную запись пользователя. * @param $id - id пользователя. * @param $data - массив значений для вставки в БД [Поле => Значение]. * @param $authRewrite - false = перезапишет данные в сессии детущего пользователя, на полученные у $data. * @return void */ public static function update($id, $data, $authRewrite = false) { $userInfo = USER::getUserById($id); foreach ($data as $k => $v) { if ($k !== 'pass') { $v = htmlspecialchars_decode($v); $data[$k] = htmlspecialchars($v); } } //только если пытаемся разжаловать админа, проверяем, // не является ли он последним админом // Без админов никак незя! if ($userInfo->role == '1' && $data['role'] != '1') { $countAdmin = DB::query(' SELECT count(id) as "count" FROM `' . PREFIX . 'user` WHERE role = 1 '); if ($row = DB::fetchAssoc($countAdmin)) { if ($row['count'] == 1) { // остался один админ $data['role'] = 1; // не даем разжаловать админа, уж лучше плохой чем никакого :-) } } } DB::query(' UPDATE `' . PREFIX . 'user` SET ' . DB::buildPartQuery($data) . ' WHERE id = ' . DB::quote($id)); if (!$authRewrite) { foreach ($data as $k => $v) { self::$_instance->auth->{$k} = $v; } $_SESSION['user'] = self::$_instance->auth; } return true; }
/** * Выгружает содержание всего каталога в CSV файл * @return array */ public function exportToYml($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.xml"); header("Content-Transfer-Encoding: binary "); $currencyShopIso = MG::getSetting('currencyShopIso'); $currencyRate = MG::getSetting('currencyRate'); $currencyRate = $currencyRate[$currencyShopIso]; $nXML = '<?xml version="1.0" encoding="windows-1251"?> <!DOCTYPE yml_catalog SYSTEM "shops.dtd">'; $xml = new XMLWriter(); $xml->openMemory(); $xml->setIndent(true); $xml->startElement("yml_catalog"); $xml->writeAttribute("date", date("Y-m-d h:m")); $xml->startElement("shop"); $xml->writeElement("name", MG::getSetting("sitename")); $xml->writeElement("company", 'Компания ' . MG::getSetting("sitename")); $xml->writeElement("url", SITE); $xml->startElement("currencies"); $xml->startElement("currency"); $xml->writeAttribute("id", $currencyShopIso); $xml->writeAttribute("rate", $currencyRate); $xml->endElement(); //currency $xml->endElement(); //currencies $xml->startElement("categories"); // получаем id категорий и id их родителей $sql = ' SELECT id, parent, title FROM `' . PREFIX . 'category` ORDER BY id'; $res = DB::query($sql); while ($row = DB::fetchAssoc($res)) { $xml->startElement("category"); $xml->writeAttribute("id", $row['id']); if ($row['parent'] > 0) { $xml->writeAttribute("parentId", $row['parent']); } $xml->text($row['title']); $xml->endElement(); //category } $xml->endElement(); //categories $costDelivery = "0"; $sql = 'SELECT `cost` FROM `' . PREFIX . 'delivery` WHERE `ymarket` = 1'; $res = DB::query($sql); while ($row = DB::fetchAssoc($res)) { $costDelivery = $row['cost']; } if ($costDelivery == 0) { $costDelivery = "0"; } $xml->writeElement("local_delivery_cost", $costDelivery); $xml->startElement("offers"); $where = ' 1=1'; if (YML_ONLY_AVAILABLE == '1') { $where = ' p.count <> 0 '; } if (!empty($listProductId)) { $where = ' p.id IN (' . DB::quote(implode(',', $listProductId), 1) . ')'; } $sql = ' SELECT c.title as category_title, 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` FROM `' . PREFIX . 'product` p LEFT JOIN `' . PREFIX . 'category` c ON c.id = p.cat_id WHERE ' . $where . ' ORDER BY c.id '; $res = DB::query($sql); $currencyShopIso = MG::getSetting('currencyShopIso'); while ($row = DB::fetchAssoc($res)) { if ($row['price'] > 0 && $row['activity'] == 1) { $row['currency_iso'] = $row['currency_iso'] ? $row['currency_iso'] : $currencyShopIso; $available = $row['count'] == 0 ? "false" : "true"; $xml->startElement("offer"); $xml->writeAttribute("id", $row['id']); $xml->writeAttribute("available", $available); $xml->writeElement("url", SITE . '/' . $row['category_url'] . '/' . $row['url']); $xml->writeElement("price", $row['price_course']); $xml->writeElement("currencyId", $currencyShopIso); $xml->writeElement("categoryId", $row['cat_id']); $arrayImages = explode("|", $row['image_url']); if (!empty($arrayImages)) { $row['image_url'] = $arrayImages[0]; } $xml->writeElement("picture", SITE . '/uploads/' . urlencode($row['image_url'])); $xml->writeElement("local_delivery_cost", $costDelivery); $xml->writeElement("name", $row['title']); $xml->writeElement("description", MG::textMore($row['description'], 500)); $xml->writeElement("sales_notes", $row['yml_sales_notes']); $xml->writeElement("manufacturer_warranty", "true"); $xml->endElement(); } } $xml->endElement(); //offers $xml->endElement(); //shop $xml->endElement(); //yml_catalog $nXML .= $xml->outputMemory(); $nXML = mb_convert_encoding($nXML, "WINDOWS-1251", "UTF-8"); if (empty($listProductId)) { echo $nXML; exit; } else { $date = date('m_d_Y_h_i_s'); file_put_contents('data_yml_' . $date . '.xml', $nXML); $msg = 'data_yml_' . $date . '.xml'; } return $msg; }
/** * Привязка свойств к товару, категории и установка значений * @param $productId1c - id товара из 1с в бзе сайта. * @param $propId1c - id обрабатываемого товара из 1с. * @param $propValue - значение свойства. * @param $categoryId - id категории. */ function propertyConnect($productId1c, $propId1c, $propValue, $categoryId) { // Получаем реальные id для товара и свойства из базы данных. $res = DB::query('SELECT id FROM `' . PREFIX . 'product` WHERE `1c_id`=' . DB::quote($productId1c)); if ($row = DB::fetchAssoc($res)) { $productId = $row['id']; } else { return false; } $res = DB::query('SELECT id FROM `' . PREFIX . 'property` WHERE `1c_id`=' . DB::quote($propId1c)); if ($row = DB::fetchAssoc($res)) { $propertyId = $row['id']; } else { return false; } // Проверим, если такой привязки еще нет между категориями и свойствами, то создадим ее для категории. $res = DB::query(' SELECT category_id FROM `' . PREFIX . 'category_user_property` WHERE `property_id`=' . DB::quote($propertyId) . ' and `category_id` = ' . DB::quote($categoryId)); if (!DB::numRows($res)) { DB::query("\n INSERT INTO `" . PREFIX . "category_user_property` (`category_id`, `property_id`)\n VALUES (" . DB::quote($categoryId) . ", " . DB::quote($propertyId) . ")"); } // Проверим, если такой привязки еще нет между продуктом и свойством , // то создадим ее для продукта. $res = DB::query(' SELECT product_id FROM `' . PREFIX . 'product_user_property` WHERE `product_id`=' . DB::quote($productId) . ' and `property_id` = ' . DB::quote($propertyId)); if (!DB::numRows($res)) { DB::query("\n INSERT INTO `" . PREFIX . "product_user_property` \n (`product_id`, `property_id`, `value`, `product_margin`, `type_view`)\n VALUES (" . DB::quote($productId) . ", " . DB::quote($propertyId) . ", " . DB::quote($propValue) . ", '', 'select')"); } else { // если привязка есть, то обновим данные DB::query(' UPDATE `' . PREFIX . 'product_user_property` SET `value` =' . DB::quote($propValue) . ' WHERE `product_id`=' . DB::quote($productId) . ' and `property_id` = ' . DB::quote($propertyId)); } return true; }
/** * Возвращает данные о всех продуктах в корзине. * @return array */ public function getItemsCart() { $productPositions = array(); // Создает модель для работы с продуктами. $itemPosition = new Models_Product(); $totalSumm = 0; if (!empty($_SESSION['cart'])) { $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $variantsId = array(); $productsId = array(); foreach ($_SESSION['cart'] as $key => $item) { if (!empty($item['variantId'])) { $variantsId[] = $item['variantId']; } $productsId[] = $item['id']; } $products_all = array(); $variants_all = 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)) { $variants_all[$variant_row['id']] = $variant_row; } } if (!empty($productsId)) { $ids = implode(',', array_unique($productsId)); $product_res = 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` p LEFT JOIN `' . PREFIX . 'category` c ON c.id = p.cat_id WHERE p.id IN (' . DB::quote($ids, true) . ')'); if (!empty($product_res)) { while ($result = DB::fetchAssoc($product_res)) { $products_all[$result['id']] = $result; } } } foreach ($_SESSION['cart'] as $key => $item) { $variant = ''; if (!empty($item['variantId'])) { // $variants = $itemPosition->getVariants($item['id']); $variant = $variants_all[$item['variantId']]; } // Заполняет массив информацией о каждом продукте по id из куков. // Если куки не актуальны, пропускает товар. $product = $products_all[$item['id']]; if (!empty($product)) { $product['property'] = $_SESSION['cart'][$key]['propertySetId']; $product['property_html'] = htmlspecialchars_decode(str_replace('&', '&', $_SESSION['cart'][$key]['property'])); $product['propertySetId'] = $_SESSION['cart'][$key]['propertySetId']; if (!empty($variant)) { $product['price'] = $variant['price']; $product['code'] = $variant['code']; $product['count'] = $variant['count']; $product['weight'] = $variant['weight']; $product['image_url'] = $variant['image'] ? $variant['image'] : $product['image_url']; $product['title'] .= " " . $variant['title_variant']; $product['variantId'] = $variant['id']; $product['price_course'] = $variant['price_course']; } // если установлен формат без копеек то округлим стоимость. $priceFormat = MG::getSetting('priceFormat'); if (in_array($priceFormat, array('1234.56', '1234', '1 234', '1,234', ''))) { $price = round($product['price_course']); } else { $price = $product['price_course']; } if ($item['id'] == $product['id']) { $count = $item['count']; $price = SmalCart::plusPropertyMargin($price, $item['propertyReal'], $currencyRate[$product['currency_iso']]); // $product['currency_iso'] = $product['currency_iso']?$product['currency_iso']:$currencyShopIso; // $price *= $currencyRate[$product['currency_iso']]; $product['price'] = $price; // применение скидки по купону $priceWithCoupon = $this->applyCoupon($_SESSION['couponCode'], $product['price'], $product); $priceWithDiscoutn = $this->applyDiscountSystem($product['price']); $product['price'] = $priceWithCoupon < $priceWithDiscoutn['price'] ? $priceWithCoupon : $priceWithDiscoutn['price']; $product['priceInCart'] = MG::priceCourse($product['price'] * $count) . " " . MG::getSetting('currency'); $arrayImages = explode("|", $product['image_url']); if (!empty($arrayImages)) { $product['image_url'] = $arrayImages[0]; } } $product['category_url'] = SHORT_LINK == '1' ? '' : $product['category_url'] . '/'; $product['link'] = SITE . '/' . (isset($product["category_url"]) ? $product["category_url"] : 'catalog' . '/') . $product["product_url"]; $product['countInCart'] = $item['count']; if ($product['countInCart'] > 0) { $productPositions[] = $product; } $totalSumm += $product['price'] * $item['count']; } } } $totalSumm = MG::priceCourse($totalSumm); $result = array('items' => $productPositions, 'totalSumm' => $totalSumm); $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Создание дубля цены в заданном курсе. */ public function deleteImagesVariant($productId) { $imagesArray = array(); // Удаляем продукт из базы. $res = DB::query(' SELECT image FROM `' . PREFIX . 'product_variant` WHERE product_id = ' . DB::quote($productId)); while ($row = DB::fetchAssoc($res)) { $imagesArray[] = $row['image']; } $this->deleteImagesProduct($imagesArray); return true; }
static function affiliatePanel() { $id = USER::getThis()->id; if (!$id) { return 'Пожалуйста, <a href="' . SITE . '/registration">зарегистрируйтесь</a>, чтобы принять участие в партнерской программе ' . MG::get('sitename') . ' и получать ' . self::$percent . '% от стоимости заказов ваших друзей и знакомых.'; } $parnterLink = false; $result = DB::query(' SELECT * FROM `' . PREFIX . 'partner` WHERE `user_id` = ' . DB::quote($id)); if ($row = DB::fetchAssoc($result)) { $parnterLink = SITE . "?partnerId=" . $row['id']; } if ($parnterLink) { return '<div class="accostPartner"><p>Уважаемый, партнер! Ваша реферальная ссылка: <span>' . $parnterLink . '</span></p><p>Передайте ее друзьям и знакомым и вы получите ' . self::$percent . '% от стоимости их заказа.</p></div>'; } else { $html = ' <script> function newPartner(){ $.ajax({ type: "POST", url: "ajax", data: { pluginHandler: "partners-program", actionerClass: "Partner", action: "becomePartner" }, dataType: "json", cache: false, success: function(response){ location="' . SITE . '/affiliate" ; } }); } </script> Здравствуйте, ' . USER::getThis()->name . ' ' . USER::getThis()->sname . ' мы предлагаем Вам стать нашим партнером и получать ' . self::$percent . '% от всех заказов привлеченных вами клентов. <a href="#" class="becomePartner" onclick="newPartner(); return false;">Получить реферальную сылку</a> '; return $html; } }
/** * Получает из БД записи */ static function getEntity() { $entity = array(); $res = DB::query("\r\n SELECT * \r\n FROM `" . PREFIX . self::$pluginName . "` \r\n ORDER BY sort ASC\r\n "); while ($row = DB::fetchAssoc($res)) { $entity[] = $row; } return $entity; }