EngineGP/system/sections/wiki/search.php
Sergei Solovev b59003e559 Reformat code
This update contains code reformatting to meet PHP standards.
2023-11-12 21:12:42 +03:00

157 lines
5.5 KiB
PHP

<?php
if (!DEFINED('EGP'))
exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
if (!isset($nmch))
$nmch = false;
$text = isset($_POST['text']) ? $_POST['text'] : (isset($url['tag']) ? urldecode($url['tag']) : sys::outjs(array('none' => '')));
$mkey = md5($text . 'wiki');
if ($mcache->get($mkey) != '' and !isset($url['tag']))
sys::outjs(array('s' => $mcache->get($mkey)));
if (!isset($text{2}) and !isset($url['tag']))
sys::outjs(array('s' => 'Для выполнения поиска, необходимо больше данных', $nmch));
$aWiki_q = array();
$aNswer_q = array();
// Поиск по вопросу
$wiki_q = $sql->query('SELECT `id` FROM `wiki` WHERE `name` LIKE FROM_BASE64(\'' . base64_encode('%' . $text . '%') . '\') OR `tags` LIKE FROM_BASE64(\'' . base64_encode('%' . $text . '%') . '\') LIMIT 5');
// Поиск по тексту (ответу)
$answer_q = $sql->query('SELECT `wiki` FROM `wiki_answer` WHERE `text` LIKE FROM_BASE64(\'' . base64_encode('%' . $text . '%') . '\') LIMIT 5');
// Если нет ниодного совпадения по вводимому тексту
if (!$sql->num($wiki_q) and !$sql->num($answer_q) and !isset($url['tag'])) {
// Поиск по словам
if (!strpos($text, ' ')) {
$mcache->set($mkey, 'По вашему запросу ничего не найдено', false, 15);
sys::outjs(array('s' => 'По вашему запросу ничего не найдено'));
}
// Массив слов
$aText = explode(' ', $text);
// Метка, которая изменится в процессе, если будет найдено хоть одно совпадение
$sWord = false;
foreach ($aText as $word) {
if ($word == '' || !isset($word{2}))
continue;
// Поиск по вопросу
$wiki_q = $sql->query('SELECT `id` FROM `wiki` WHERE `name` LIKE FROM_BASE64(\'' . base64_encode('%' . $word . '%') . '\') OR `tags` LIKE FROM_BASE64(\'' . base64_encode('%' . $word . '%') . '\') LIMIT 5');
// Поиск по тексту (ответу)
$answer_q = $sql->query('SELECT `wiki` FROM `wiki_answer` WHERE `text` LIKE FROM_BASE64(\'' . base64_encode('%' . $word . '%') . '\') LIMIT 5');
if ($sql->num($wiki_q))
$aWiki_q[] = $wiki_q;
if ($sql->num($answer_q))
$aNswer_q[] = $answer_q;
}
} else {
$aWiki_q[] = $wiki_q;
$aNswer_q[] = $answer_q;
}
if (!count($aWiki_q) and !count($aNswer_q) and !isset($url['tag'])) {
$mcache->set($mkey, 'По вашему запросу ничего не найдено', false, 15);
sys::outjs(array('s' => 'По вашему запросу ничего не найдено'));
}
// Защита от дублирования
$aResult = array();
foreach ($aWiki_q as $index => $wiki_q) {
// Генерация списка (совпадение по вопросу)
while ($wiki = $sql->get($wiki_q)) {
// Проверка дублирования
if (in_array($wiki['id'], $aResult))
continue;
$sql->query('SELECT `id`, `name`, `tags`, `date` FROM `wiki` WHERE `id`="' . $wiki['id'] . '" LIMIT 1');
$quest = $sql->get();
$aTags = explode(',', $quest['tags']);
$tags = '';
foreach ($aTags as $tag) {
$tag = trim($tag);
$tags .= '<a href="' . $cfg['http'] . 'wiki/section/search/tag/' . $tag . '">' . $tag . '</a>';
}
$html->get('list', 'sections/wiki/question');
$html->set('id', $quest['id']);
$html->set('name', sys::find($quest['name'], $text));
$html->set('tags', $tags != '' ? $tags : 'Теги отсутствуют');
$html->set('date', sys::today($quest['date']));
$html->set('home', $cfg['http']);
$html->pack('question');
array_push($aResult, $wiki['id']);
}
}
foreach ($aNswer_q as $index => $answer_q) {
// Генерация списка (совпадение по ответу)
while ($answer = $sql->get($answer_q)) {
// Проверка дублирования
if (in_array($answer['wiki'], $aResult))
continue;
$sql->query('SELECT `id`, `name`, `tags`, `date` FROM `wiki` WHERE `id`="' . $answer['wiki'] . '" LIMIT 1');
$quest = $sql->get();
$aTags = explode(',', $quest['tags']);
$tags = '';
foreach ($aTags as $tag) {
$tag = trim($tag);
$tags .= '<a href="' . $cfg['http'] . 'wiki/section/search/tag/' . $tag . '">' . $tag . '</a>';
}
$html->get('list', 'sections/wiki/question');
$html->set('id', $quest['id']);
$html->set('name', sys::find($quest['name'], $text));
$html->set('tags', $tags != '' ? $tags : 'Теги отсутствуют');
$html->set('date', sys::today($quest['date']));
$html->set('home', $cfg['http']);
$html->pack('question');
}
}
$html->arr['question'] = isset($html->arr['question']) ? $html->arr['question'] : 'По вашему запросу ничего не найдено';
$mcache->set($mkey, $html->arr['question'], false, 15);
if (!isset($url['tag']))
sys::outjs(array('s' => $html->arr['question']), $nmch);
$html->nav('Категории вопросов', $cfg['http'] . 'wiki');
$html->nav('Поиск по тегам');
$html->get('search', 'sections/wiki');
$html->set('text', $text);
$html->set('result', $html->arr['question']);
$html->pack('main');
?>