+ Filter action search results by forums
This commit is contained in:
parent
81bd6ea514
commit
2345182df6
5 changed files with 42 additions and 20 deletions
|
@ -74,7 +74,7 @@ class Routing
|
|||
$r->add('GET', '/search/advanced[/{keywords}/{author}/{forums}/{serch_in:\d}/{sort_by:\d}/{sort_dir:\d}/{show_as:\d}[/{page:[1-9]\d*}]]', 'Search:viewAdvanced', 'SearchAdvanced');
|
||||
$r->add('POST', '/search/advanced', 'Search:viewAdvanced');
|
||||
|
||||
$r->add('GET', '/search[/user/{uid:[2-9]|[1-9]\d+}]/{action:(?!search)\w+}[/{page:[1-9]\d*}]', 'Search:action', 'SearchAction');
|
||||
$r->add('GET', '/search[/user/{uid:[2-9]|[1-9]\d+}]/{action:(?!search)[a-z_]+}[/in_forum/{forum:[1-9]\d*}][/{page:[1-9]\d*}]', 'Search:action', 'SearchAction');
|
||||
}
|
||||
// юзеры
|
||||
if ($user->viewUsers) {
|
||||
|
|
|
@ -421,6 +421,12 @@ class Search extends Page
|
|||
{
|
||||
$this->c->Lang->load('search');
|
||||
|
||||
$forum = isset($args['forum']) ? (int) $args['forum'] : 0;
|
||||
$forum = $this->c->forums->get($forum);
|
||||
if (! $forum instanceof Forum) {
|
||||
return $this->c->Message->message('Bad request');
|
||||
}
|
||||
|
||||
$model = $this->c->search;
|
||||
$model->page = isset($args['page']) ? (int) $args['page'] : 1;
|
||||
$action = $args['action'];
|
||||
|
@ -435,9 +441,9 @@ class Search extends Page
|
|||
switch ($action) {
|
||||
case 'search':
|
||||
if (1 === $model->showAs) {
|
||||
$list = $model->actionT($action);
|
||||
$list = $model->actionT($action, $forum);
|
||||
} else {
|
||||
$list = $model->actionP($action);
|
||||
$list = $model->actionP($action, $forum);
|
||||
$asTopicsList = false;
|
||||
}
|
||||
if ('*' === $args['author']) {
|
||||
|
@ -458,10 +464,14 @@ class Search extends Page
|
|||
break;
|
||||
}
|
||||
$uid = $this->user->id;
|
||||
$list = $model->actionT($action, $uid);
|
||||
$list = $model->actionT($action, $forum, $uid);
|
||||
$model->name = \ForkBB\__('Quick search ' . $action);
|
||||
$model->linkMarker = 'SearchAction';
|
||||
$model->linkArgs = ['action' => $action];
|
||||
if ($forum->id) {
|
||||
$model->linkArgs = ['action' => $action, 'forum' => $forum->id];
|
||||
} else {
|
||||
$model->linkArgs = ['action' => $action];
|
||||
}
|
||||
$this->fSubIndex = $subIndex[$action];
|
||||
break;
|
||||
case 'posts':
|
||||
|
@ -475,13 +485,17 @@ class Search extends Page
|
|||
break;
|
||||
}
|
||||
if ($asTopicsList) {
|
||||
$list = $model->actionT($action, $user->id);
|
||||
$list = $model->actionT($action, $forum, $user->id);
|
||||
} else {
|
||||
$list = $model->actionP($action, $user->id);
|
||||
$list = $model->actionP($action, $forum, $user->id);
|
||||
}
|
||||
$model->name = \ForkBB\__('Quick search user ' . $action, $user->username);
|
||||
$model->linkMarker = 'SearchAction';
|
||||
$model->linkArgs = ['action' => $action, 'uid' => $user->id];
|
||||
if ($forum->id) {
|
||||
$model->linkArgs = ['action' => $action, 'uid' => $user->id, 'forum' => $forum->id];
|
||||
} else {
|
||||
$model->linkArgs = ['action' => $action, 'uid' => $user->id];
|
||||
}
|
||||
|
||||
break;
|
||||
# default:
|
||||
|
@ -492,7 +506,7 @@ class Search extends Page
|
|||
return $this->c->Message->message('Bad request');
|
||||
} elseif (empty($list)) {
|
||||
$this->fIswev = ['i', \ForkBB\__('No hits')];
|
||||
return $this->view(['advanced' => 'advanced'], 'GET');
|
||||
return $this->view([], 'GET', true);
|
||||
}
|
||||
|
||||
if ($asTopicsList) {
|
||||
|
|
|
@ -14,17 +14,21 @@ class ActionP extends Method
|
|||
* Поисковые действия по сообщениям
|
||||
*
|
||||
* @param string $action
|
||||
* @param Forum $root
|
||||
* @param int $uid
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @return false|array
|
||||
*/
|
||||
public function actionP($action, $uid = null)
|
||||
public function actionP($action, Forum $root, $uid = null)
|
||||
{
|
||||
$root = $this->c->forums->get(0);
|
||||
if (! $root instanceof Forum || empty($root->descendants)) {
|
||||
return []; //????
|
||||
$forums = \array_keys($root->descendants);
|
||||
if ($root->id) {
|
||||
$forums[] = $root->id;
|
||||
}
|
||||
if (empty($forums)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$sql = null;
|
||||
|
@ -58,7 +62,7 @@ class ActionP extends Method
|
|||
|
||||
if (null !== $sql) {
|
||||
$vars = [
|
||||
':forums' => array_keys($root->descendants),
|
||||
':forums' => $forums,
|
||||
':uid' => $uid,
|
||||
];
|
||||
$list = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
|
|
@ -14,17 +14,21 @@ class ActionT extends Method
|
|||
* Поисковые действия по темам
|
||||
*
|
||||
* @param string $action
|
||||
* @param Forum $root
|
||||
* @param int $uid
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @return false|array
|
||||
*/
|
||||
public function actionT($action, $uid = null)
|
||||
public function actionT($action, Forum $root, $uid = null)
|
||||
{
|
||||
$root = $this->c->forums->get(0);
|
||||
if (! $root instanceof Forum || empty($root->descendants)) {
|
||||
return []; //????
|
||||
$forums = \array_keys($root->descendants);
|
||||
if ($root->id) {
|
||||
$forums[] = $root->id;
|
||||
}
|
||||
if (empty($forums)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$sql = null;
|
||||
|
@ -65,7 +69,7 @@ class ActionT extends Method
|
|||
|
||||
if (null !== $sql) {
|
||||
$vars = [
|
||||
':forums' => \array_keys($root->descendants),
|
||||
':forums' => $forums,
|
||||
':uid' => $uid,
|
||||
];
|
||||
$list = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
|
|
@ -119,7 +119,7 @@ class Model extends DataModel
|
|||
}
|
||||
|
||||
/**
|
||||
* Статус наличия не прочитанных сообщений в теме
|
||||
* Статус наличия непрочитанных сообщений в теме
|
||||
*
|
||||
* @return false|int
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue