1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262:
<?php
function query_multibase($obj) {
$multi_cat = null;
if (defined("HostID") or defined("HostMain")) {
if (defined("HostID"))
$where['servers'] = " REGEXP 'i" . HostID . "i'";
elseif (defined("HostMain"))
$where['servers'] = ' ="" or servers REGEXP "i1000i"';
$multi_cat = array();
$multi_dop_cat = null;
$PHPShopOrm = new PHPShopOrm($GLOBALS['SysValue']['base']['categories']);
$PHPShopOrm->debug = $obj->debug;
$data = $PHPShopOrm->select(array('id'), $where, false, array('limit' => 10000));
if (is_array($data)) {
foreach ($data as $row) {
$multi_cat[] = $row['id'];
$multi_dop_cat.=" or dop_cat REGEXP '#" . $row['id'] . "#'";
}
}
$multi_select = ' and ( category IN (' . @implode(',', $multi_cat) . ')' . $multi_dop_cat . ')';
return $multi_select;
}
}
function query_filter($obj) {
global $SysValue;
if (!empty($_REQUEST['v']))
$v = $_REQUEST['v'];
else
$v = null;
if (!empty($_REQUEST['pole']))
$pole = intval($_REQUEST['pole']);
else
$pole = $obj->PHPShopSystem->getSerilizeParam('admoption.search_pole');
if(empty($pole))
$pole=1;
if (!empty($_REQUEST['p']))
$p = intval($_REQUEST['p']);
else
$p = 1;
$cat = intval($_REQUEST['cat']);
$words = trim(PHPShopSecurity::true_search($_REQUEST['words']));
$num_row = $obj->num_row;
$num_ot = $q = 0;
$sortV = $sort = null;
if (empty($_POST['v']))
@$v = $SysValue['nav']['query']['v'];
if (is_array($v))
foreach ($v as $key => $value) {
if (!empty($value)) {
$hash = $key . "-" . $value;
$sortV.=" and vendor REGEXP 'i" . $hash . "i' ";
}
}
$words = PHPShopSecurity::true_search(PHPShopSecurity::TotalClean($words, 2));
$_WORDS = explode(" ", $words);
if (!empty($_POST['ajax'])) {
foreach ($_WORDS as $w)
$sort.="(name REGEXP '\x20*$w' or uid REGEXP '^$w' or keywords REGEXP '$w') or ";
}
else {
foreach ($_WORDS as $w)
$wrd .= '%' . $w;
$wrd .='%';
switch ($pole) {
case(1):
$sort.="(name LIKE '$wrd' or keywords LIKE '$wrd' or id LIKE '$wrd') and ";
break;
case(2):
$sort.="(name LIKE '$wrd' or content LIKE '$wrd' or description LIKE '$wrd' or keywords LIKE '$wrd' or uid LIKE '$wrd') and ";
break;
}
}
$sort = substr($sort, 0, strlen($sort) - 4);
if (!empty($cat) and !defined("HostID"))
$string = " category=$cat and";
else
$string = null;
$prewords = search_base($obj, $words);
$multibase = query_multibase($obj);
if ($p == "all") {
$sql = "select * from " . $SysValue['base']['products'] . " where $sort $prewords $multibase and enabled='1' and parent_enabled='0' order by num desc, items desc";
}
else
while ($q < $p) {
$sql = "select * from " . $SysValue['base']['products'] . " where $string ($sort) $prewords $sortV $multibase and enabled='1' and parent_enabled='0' order by num desc, items desc LIMIT $num_ot, $num_row";
$q++;
$num_ot = $num_ot + $num_row;
}
if($obj->isYandexSearch && empty($prewords)) {
$sql = getYandexSearchSql($obj, $words, $p, $multibase, $cat);
}
$obj->search_order = array(
'words' => $words,
'pole' => $pole,
'cat' => $cat,
'string' => $string,
'sort' => $sort,
'prewords' => $prewords,
'sortV' => $sortV
);
$obj->set('searchString', $words);
if ($pole == 1)
$obj->set('searchSetC', 'checked');
else
$obj->set('searchSetD', 'checked');
return $sql;
}
function getYandexSearchSql($obj, $search, $p, $multibase = null, $cat = 0)
{
global $SysValue;
if(isset($_REQUEST['ajax'])) {
$_WORDS = explode(" ", $search);
$wordsCount = count($_WORDS);
if($wordsCount > 1) {
$search = '';
for($i = 0; $i < $wordsCount / 2; $i++) {
$search .= ' ' . $_WORDS[$i];
}
}
}
$params = array(
'apikey' => $obj->yandexSearchAPI,
'searchid' => $obj->yandexSearchId,
'text' => PHPShopString::win_utf8($search),
'page' => $p - 1,
'per_page' => $obj->num_row
);
if((int) $cat > 0) {
$params['category_id'] = $cat;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, PHPShopSearch::YANDEX_SEARCH_API_URL . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch),1);
$obj->set('hideSearchType', 'hidden');
if(is_array($data['misspell']['misspell'])) {
$obj->set('searchMisspell', __('') . '' . PHPShopString::utf8_win1251($data['misspell']['misspell']['text']) . '">' . PHPShopString::utf8_win1251($data['misspell']['misspell']['text']) . '');
} else {
$obj->set('searchMisspell', '');
}
if(is_array($data['documents'])) {
$ids = array();
foreach ($data['documents'] as $document) {
$ids[] = $document['id'];
}
return "select * from " . $SysValue['base']['products'] . " where id IN (" . implode(',', $ids) . ") $multibase and enabled='1' and parent_enabled='0' order by num desc, items desc";
}
return null;
}
function search_base($obj, $words) {
$string = null;
$PHPShopOrm = new PHPShopOrm();
$PHPShopOrm->mysql_error = false;
$PHPShopOrm->debug = $obj->debug;
$result = $PHPShopOrm->query("select * from " . $GLOBALS['SysValue']['base']['search_base'] . " where name REGEXP 'i" . PHPShopSecurity::true_search($words) . "i' and enabled='1' limit 1");
$row = mysqli_fetch_array($result);
if (!empty($row['uid'])) {
$uid = $row['uid'];
if (strstr($row['uid'], ','))
$uids = explode(",", $uid);
else
$uids[] = $uid;
if (is_array($uids))
$string = ' or id IN (' . @implode(",", $uids) . ') ';
return $string;
}
else if (!empty($row['category'])) {
header('Location: /' . $GLOBALS['dir']['dir'] . 'shop/CID_' . $row['category'] . '.html');
} else if (!empty($row['link'])) {
header('Location: ' . $row['link']);
}
}
?>