static function getEntity() { $result = array(); $sql = "SELECT * FROM `" . PREFIX . "call_back` ORDER BY id ASC"; if ($_POST["page"]) { $page = $_POST["page"]; } $navigator = new Navigator($sql, $page); $entity = $navigator->getRowsSql(); $pagination = $navigator->getPager('forAjax'); $result = array('entity' => $entity, 'pagination' => $pagination); return $result; }
/** * Выводит страницу настроек плагина в админке */ static function pageSettingsPlugin() { if ($_POST["page"]) { $page = $_POST["page"]; //если был произведен запрос другой страницы, то присваиваем переменной новый индекс } $navigator = new Navigator("\n SELECT p. * , u.email, COUNT( p.id ) as count_orders\n FROM `" . PREFIX . "partner` AS p\n LEFT JOIN `" . PREFIX . "user` AS u ON u.id = p.user_id\n LEFT JOIN `" . PREFIX . "partner_order` AS po ON po.partner_id = p.id\n GROUP BY p.id\n ORDER BY p.payments_amount DESC ", $page, 20); //определяем класс $partners = $navigator->getRowsSql(); $pagination = $navigator->getPager('forAjax'); $option = MG::getSetting('partners-program'); $option = stripslashes($option); $options = unserialize($option); // подключаем view для страницы плагина include 'pagePlugin.php'; }
public 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 = "\r\n\t\t\t\tSELECT id, name, comment, date\r\n\t\t\t\tFROM `" . PREFIX . "comments` \r\n\t\t\t\tWHERE (uri = " . DB::quote($uri) . " OR uri = " . DB::quote($uri . ".html") . ") AND approved = '1'\r\n\t\t\t\tORDER BY `id` DESC"; $res = DB::query($sql); //Получаем блок пагинации if ($_POST["page"]) { $page = $_POST["page"]; } //если был произведен запрос другой страницы, то присваиваем переменной новый индекс $navigator = new Navigator($sql, $page, MG::getSetting('countPrintRowsComments')); //определяем класс $comments = $navigator->getRowsSql(); $pagination = $navigator->getPager('forAjax'); /* * Получаем непосредственно комментарии. Если была запрошена не первая страница комментариев, выполняем вторую ветку условия. */ foreach ($comments as $key => $value) { $comments[$key]['date'] = date('d.m.Y H:i', $result['comments']['date']); } $result['pagination'] = $pagination; $this->data = $result; return true; } else { $sql = "\r\n\t\t\t\tSELECT id, name, comment, date\r\n\t\t\t\tFROM `" . PREFIX . "comments`\r\n\t\t\t\tORDER BY date DESC"; $res = DB::query($sql); while ($row = DB::fetchAssoc($res)) { $result[$row['id']] = $row; } return $result; } }
/** * Вывод страницы плагина в админке */ static function pagePluginComments() { $lang = PM::plugLocales('comments'); if ($_POST["page"]) { $page = $_POST["page"]; } //если был произведен запрос другой страницы, то присваиваем переменной новый индекс $countPrintRowsComments = MG::getSetting('countPrintRowsComments'); $navigator = new Navigator("SELECT * FROM `" . PREFIX . "comments` ORDER BY `id` DESC", $page, $countPrintRowsComments); //определяем класс $comments = $navigator->getRowsSql(); $pagination = $navigator->getPager('forAjax'); // подключаем view для страницы плагина include 'pagePlugin.php'; }
public static function getListNews($count = 100) { //Получаем список новостей if ($_GET["page"]) { $page = $_GET["page"]; } //если был произведен запрос другой страницы, то присваиваем переменной новый индекс $navigator = new Navigator("SELECT * FROM `mpl_news` ORDER BY `add_date` DESC", $page, $count); //определяем класс $news = $navigator->getRowsSql(); $pagination = $navigator->getPager(); return array('listNews' => $news, 'pagination' => $pagination); }
/** * Возвращает список найденных продуктов соответствующих поисковой фразе. * @param string $keyword - поисковая фраза. * @param string $allRows - получить сразу все записи. * @param string $onlyActive - учитывать только активные продукты. * @param boolean $adminPanel - запрос из публичной части или админки. * @return array */ public function getListProductByKeyWord($keyword, $allRows = false, $onlyActive = false, $adminPanel = false, $mode = false) { $result = array('catalogItems' => array(), 'pager' => null, 'numRows' => null); $keyword = htmlspecialchars($keyword); $keywordUnTrim = $keyword; $keyword = trim($keyword); if (empty($keyword) || strlen($keyword) <= 2) { return $result; } $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); // Поиск по точному соответствию. // Пример $keyword = " 'красный', зеленый " // Убираем начальные пробелы и конечные. $keyword = trim($keyword); //$keyword = "'красный', зеленый" if (SEARCH_FULLTEXT) { // Вырезаем спец символы из поисковой фразы. $keyword = preg_replace('/[`~!#$%^*()=+\\\\|\\/\\[\\]{};:"\',<>?]+/', '', $keyword); //$keyword = "красный зеленый" // Замена повторяющихся пробелов на на один. $keyword = preg_replace('/ +/', ' ', $keyword); //$keyword = "красный зеленый" // Обрамляем каждое слово в звездочки, для расширенного поиска. $keyword = str_replace(' ', '* +', $keyword); //$keyword = "красный* *зеленый" // Добавляем по краям звездочки. $keyword = '+' . $keyword . '*'; //$keyword = "*красный* *зеленый*" $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, pv.id as variant_id, rate,(p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`\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"; } $prod = new Models_Product(); $fulltext = ""; $sql .= " WHERE "; $match = " MATCH (\n p.`title` , p.`code`, p.`description` " . $fulltextInVar . " " . $fulltext . "\n )\n AGAINST (\n '" . $keyword . "'\n IN BOOLEAN\n MODE\n ) "; DB::query("SELECT id FROM `" . PREFIX . "product_variant` LIMIT 1"); //Если есть варианты товаров то будеи искать и в них. if (DB::numRows(DB::query("SELECT id FROM `" . PREFIX . "product_variant` LIMIT 1"))) { $fulltextInVar = ', pv.`title_variant`, pv.`code` '; $match = "(" . $match . " OR MATCH (pv.`title_variant`, pv.`code`)\n AGAINST (\n '" . $keyword . "'\n IN BOOLEAN\n MODE\n )) "; } $sql .= $match; // Проверяем чтобы в вариантах была хотябы одна единица. if (!$adminPanel) { if (MG::getSetting('printProdNullRem') == "true") { $sql .= " AND (temp.`varcount` > 0 OR temp.`varcount` < 0 OR p.count>0 OR p.count<0)"; } } if ($onlyActive) { $sql .= ' AND p.`activity` = 1'; } } else { $sql = "\n SELECT distinct p.id, CONCAT(c.parent_url,c.url) AS category_url,\n p.url AS product_url, p.*, pv.product_id as variant_exist, pv.id as variant_id, rate,(p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`, \n p.currency_iso\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"; } $prod = new Models_Product(); $fulltext = ""; //Если есть варианты товаров то будеи искать и в них. if (DB::numRows(DB::query("SELECT id FROM `" . PREFIX . "product_variant` LIMIT 1"))) { $fulltextInVar = " OR\n pv.`title_variant` LIKE '%" . DB::quote($keyword, true) . "%'\n OR\n pv.`code` LIKE '%" . DB::quote($keyword, true) . "%'"; } $sql .= " WHERE (\n p.`title` LIKE '%" . DB::quote($keyword, true) . "%'\n OR\n p.`code` LIKE '%" . DB::quote($keyword, true) . "%'\n " . $fulltextInVar . ')'; // Проверяем чтобы в вариантах была хотябы одна единица. if (!$adminPanel) { if (MG::getSetting('printProdNullRem') == "true") { $sql .= " AND (temp.`varcount` > 0 OR temp.`varcount` < 0 OR p.count>0 OR p.count<0)"; } } if ($onlyActive) { $sql .= ' AND p.`activity` = 1'; } } $page = URL::get("page"); $settings = MG::get('settings'); //if ($mode=='groupBy') { $sql .= ' GROUP BY p.id'; //} if ($allRows) { $sql .= ' LIMIT 15'; } $navigator = new Navigator($sql, $page, $settings['countСatalogProduct'], $linkCount = 6, $allRows); // Определяем класс. $this->products = $navigator->getRowsSql(); // добавим к полученым товарам их свойства $this->products = $this->addPropertyToProduct($this->products); $this->pager = $navigator->getPager(); $result = array('catalogItems' => $this->products, 'pager' => $this->pager, 'numRows' => $navigator->getNumRowsSql()); if (count($result['catalogItems']) > 0) { // упорядочивание списка найденых продуктов // первыми в списке будут стоять те товары, у которых полностью совпала поисковая фраза // затем будут слова в начале которых встретилось совпадение // в конце слова в середине которых встретилось совпадение // // $keyword = str_replace('*', '', $keyword); $resultTemp = $result['catalogItems']; $prioritet0 = array(); $prioritet1 = array(); $prioritet2 = array(); foreach ($resultTemp as $key => $item) { $title = mb_convert_case($item['title'], MB_CASE_LOWER, "UTF-8"); $keyword = mb_convert_case($keyword, MB_CASE_LOWER, "UTF-8"); if (trim($title) == $keyword) { $prioritet0[] = $item; continue; } if (strpos($title, $keyword) === 0) { $prioritet1[] = $item; } else { $prioritet2[] = $item; } } $result['catalogItems'] = array_merge($prioritet0, $prioritet1, $prioritet2); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
$filter = new Filter($property); $arr = array('date_add' => array(!empty($_POST['date_add'][0]) ? $_POST['date_add'][0] : $minDate, !empty($_POST['date_add'][1]) ? $_POST['date_add'][1] : $maxDate, 'date'), 'email' => !empty($_POST['email']) ? $_POST['email'] : null, 'role' => !empty($_POST['role']) ? $_POST['role'] : 'null'); $userFilter = $filter->getFilterSql($arr, explode('|', $_POST['sorter'])); $sorterData = explode('|', $_POST['sorter']); if ($sorterData[1] > 0) { $sorterData[3] = 'desc'; } else { $sorterData[3] = 'asc'; } $countPrintRowsUser = MG::getSetting('countPrintRowsUser'); if (empty($_POST['sorter'])) { if (empty($userFilter)) { $userFilter .= ' 1=1 '; } $userFilter .= "ORDER BY `date_add` DESC"; } $navigator = new Navigator("SELECT * FROM `" . PREFIX . "user` WHERE " . $userFilter . "", $page, $countPrintRowsUser); //определяем класс $users = $navigator->getRowsSql(); $this->accessStatus = USER::$accessStatus; $this->groupName = USER::$groupName; $this->users = $navigator->getRowsSql(); $this->pagination = $navigator->getPager('forAjax'); $this->countPrintRowsUser = $countPrintRowsUser; $res = DB::query("SELECT id FROM `" . PREFIX . "user`"); $count = DB::numRows($res); $this->usersCount = $count; $this->displayFilter = $_POST['role'] != "null" && !empty($_POST['role']) || isset($_POST['applyFilter']); // так проверяем произошол ли запрос по фильтрам или нет $this->filter = $filter->getHtmlFilter(); $this->sorterData = $sorterData;
/** * Выгружает список пользоватеоей в CSV файл. * $listUserId выгрузка выбранных пользователей * @return array */ public function exportToCsvUser($listUserId = 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 .= '"email";"Имя";"Фамилия";"Адрес";"Телефон";"День рождения";"Статус";"Группа";"Дата регистрации";"Доступ к кабинету";"Юр.лицо";"Юр.адрес";"ИНН";"КПП";"Банк";"БИК";"К/Сч";"Р/Сч";"IP";' . "\n"; Storage::$noCache = true; $page = 1; // получаем максимальное количество заказов, если выгрузка всего ассортимента if (empty($listUserId)) { $res = DB::query(' SELECT count(id) as count FROM `' . PREFIX . 'user` '); if ($user = DB::fetchAssoc($res)) { $count = $user['count']; } $maxCountPage = ceil($count / 500); } else { $maxCountPage = ceil(count($listUserId) / 500); } $listId = implode(',', $listUserId); for ($page = 1; $page <= $maxCountPage; $page++) { URL::setQueryParametr("page", $page); $sql = 'SELECT * FROM `' . PREFIX . 'user`'; if (!empty($listUserId)) { $sql .= ' WHERE `id` IN (' . DB::quote($listId, 1) . ')'; } $navigator = new Navigator($sql, $page, 500); //определяем класс $users = $navigator->getRowsSql(); foreach ($users as $row) { $csvText .= self::addUserToCsvLine($row); } } $csvText = substr($csvText, 0, -2); // удаляем последний символ '\n' $csvText = mb_convert_encoding($csvText, "WINDOWS-1251", "UTF-8"); if (empty($listUserId)) { 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 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); }
} else { $sorterData[3] = 'asc'; } $page = !empty($_POST["page"]) ? $_POST["page"] : 0; //если был произведен запрос другой страницы, то присваиваем переменной новый индекс $countPrintRowsOrder = MG::getSetting('countPrintRowsOrder'); if (empty($_POST['sorter'])) { if (empty($userFilter)) { $userFilter .= ' 1=1 '; } $userFilter .= " ORDER BY `add_date` DESC"; } $sql = "\r\n SELECT o.* ,u.sname, u.name FROM `" . PREFIX . "order` as o\r\n LEFT JOIN `" . PREFIX . "user` as u ON o.user_email = u.email\r\n WHERE " . $userFilter . "\r\n"; $navigator = new Navigator($sql, $page, $countPrintRowsOrder); //определяем класс $orders = $navigator->getRowsSql(); $this->itemsCount = $navigator->getNumRowsSql(); $sql = "\r\n SELECT SUM(o.summ+o.delivery_cost) as totalsum FROM `" . PREFIX . "order` as o\r\n LEFT JOIN `" . PREFIX . "user` as u ON o.user_email = u.email\r\n WHERE " . $userFilter . "\r\n"; $res = DB::query($sql); if ($row = DB::fetchAssoc($res)) { $totalSumm = $row['totalsum']; } $this->totalSumm = $totalSumm; // Десериализация строки в массив (состав заказа) foreach ($orders as $k => $order) { $orders[$k]['order_content'] = unserialize(stripslashes($order['order_content'])); if ($orders[$k]['number'] == '') { $orders[$k]['number'] = $orders[$k]['id']; DB::query("UPDATE `" . PREFIX . "order` SET `number`= " . DB::quote($orders[$k]['number']) . " WHERE `id`=" . DB::quote($orders[$k]['id']) . ""); } }