mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
Merge branch 'ticket/16941' into ticket/16941-master
This commit is contained in:
commit
043c8ec386
6 changed files with 84 additions and 7 deletions
2
.github/setup-sphinx.sh
vendored
2
.github/setup-sphinx.sh
vendored
|
@ -135,7 +135,7 @@ searchd
|
|||
read_timeout = 5
|
||||
max_children = 30
|
||||
pid_file = $SPHINX_DATA_DIR/searchd.pid
|
||||
binlog_path = $SPHINX_DATA_DIR/
|
||||
binlog_path = $SPHINX_DATA_DIR
|
||||
}
|
||||
" > $SPHINX_CONF
|
||||
|
||||
|
|
|
@ -268,9 +268,47 @@ class fulltext_sphinx implements search_backend_interface
|
|||
$this->sphinx->SetMatchMode(SPH_MATCH_ANY);
|
||||
}
|
||||
|
||||
if (strlen($keywords) > 0)
|
||||
// Split words
|
||||
$split_keywords = preg_replace('#([^\p{L}\p{N}\'*"()])#u', '$1$1', str_replace('\'\'', '\' \'', trim($keywords)));
|
||||
$matches = array();
|
||||
preg_match_all('#(?:[^\p{L}\p{N}*"()]|^)([+\-|]?(?:[\p{L}\p{N}*"()]+\'?)*[\p{L}\p{N}*"()])(?:[^\p{L}\p{N}*"()]|$)#u', $split_keywords, $matches);
|
||||
$this->split_words = $matches[1];
|
||||
|
||||
if ($terms == 'any')
|
||||
{
|
||||
$this->search_query = str_replace('"', '"', $keywords);
|
||||
$this->search_query = '';
|
||||
foreach ($this->split_words as $word)
|
||||
{
|
||||
if ((strpos($word, '+') === 0) || (strpos($word, '-') === 0) || (strpos($word, '|') === 0))
|
||||
{
|
||||
$word = substr($word, 1);
|
||||
}
|
||||
$this->search_query .= $word . ' ';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->search_query = '';
|
||||
foreach ($this->split_words as $word)
|
||||
{
|
||||
if ((strpos($word, '+') === 0) || (strpos($word, '-') === 0))
|
||||
{
|
||||
$this->search_query .= $word . ' ';
|
||||
}
|
||||
else if (strpos($word, '|') === 0)
|
||||
{
|
||||
$this->search_query .= substr($word, 1) . ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->search_query .= '+' . $word . ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->search_query)
|
||||
{
|
||||
$this->search_query = str_replace('"', '"', $this->search_query);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -263,7 +263,12 @@ abstract class phpbb_functional_search_base extends phpbb_functional_test_case
|
|||
|
||||
// Ensure search index has been actually created
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_search&mode=index&sid=' . $this->sid);
|
||||
$posts_indexed = (int) $crawler->filter('#acp_search_index_' . str_replace('\\', '-', $search_type) . ' td')->eq(1)->text();
|
||||
$posts_indexed = (int) $crawler->filter('#acp_search_index_' . str_replace('\\', '-', $search_type) . ' td')->reduce(
|
||||
function ($node, $i) {
|
||||
// Find the value of total posts indexed
|
||||
return (strpos($node->text(), $this->lang('FULLTEXT_MYSQL_TOTAL_POSTS')) !== false || strpos($node->text(), $this->lang('TOTAL_WORDS')) !== false);
|
||||
})
|
||||
->nextAll()->eq(0)->text();
|
||||
$this->assertTrue($posts_indexed > 0);
|
||||
}
|
||||
|
||||
|
@ -300,7 +305,12 @@ abstract class phpbb_functional_search_base extends phpbb_functional_test_case
|
|||
|
||||
// Ensure search index has been actually removed
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_search&mode=index&sid=' . $this->sid);
|
||||
$posts_indexed = (int) $crawler->filter('#acp_search_index_' . str_replace('\\', '-', $this->search_backend) . ' td')->eq(1)->text();
|
||||
$posts_indexed = (int) $crawler->filter('#acp_search_index_' . str_replace('\\', '-', $this->search_backend) . ' td')->reduce(
|
||||
function ($node, $i) {
|
||||
// Find the value of total posts indexed
|
||||
return (strpos($node->text(), $this->lang('FULLTEXT_MYSQL_TOTAL_POSTS')) !== false || strpos($node->text(), $this->lang('TOTAL_WORDS')) !== false);
|
||||
})
|
||||
->nextAll()->eq(0)->text();
|
||||
$this->assertEquals(0, $posts_indexed);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,8 +27,10 @@ class phpbb_functional_search_sphinx_test extends phpbb_functional_search_base
|
|||
|
||||
if (!$backend || $this->search_backend == $backend)
|
||||
{
|
||||
$output = $retval = null;
|
||||
|
||||
// After creating phpBB search index, build Sphinx index
|
||||
exec('sudo -S service sphinxsearch stop', $output, $retval); // Attemtp to stop sphinxsearch service in case it's running
|
||||
exec('sudo -S service sphinxsearch stop', $output, $retval); // Attempt to stop sphinxsearch service in case it's running
|
||||
exec('sudo -S indexer --all', $output, $retval); // Run sphinxsearch indexer
|
||||
exec('sudo -S service sphinxsearch start', $output, $retval); // Attempt to start sphinxsearch service again
|
||||
}
|
||||
|
|
|
@ -601,8 +601,17 @@ class phpbb_functional_visibility_softdelete_test extends phpbb_functional_test_
|
|||
// Assert new topic title is indexed as well
|
||||
$this->add_lang('search');
|
||||
self::request('GET', "search.php?keywords=bang&sid={$this->sid}");
|
||||
|
||||
// Sphinx search doesn't apply to unapproved or softdeleted posts
|
||||
if (strpos($this->get_search_type(), 'fulltext_sphinx'))
|
||||
{
|
||||
$this->assertStringContainsString(sprintf($this->lang['FOUND_SEARCH_MATCHES'][2], 0), self::get_content());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->assertStringContainsString(sprintf($this->lang['FOUND_SEARCH_MATCHES'][1], 1), self::get_content());
|
||||
}
|
||||
}
|
||||
|
||||
public function test_move_topic_back()
|
||||
{
|
||||
|
|
|
@ -895,6 +895,24 @@ class phpbb_functional_test_case extends phpbb_test_case
|
|||
return $group_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current board's search type
|
||||
*
|
||||
* @return string Current search type setting
|
||||
*/
|
||||
protected function get_search_type()
|
||||
{
|
||||
$db = $this->get_db();
|
||||
$sql = 'SELECT config_value as search_type
|
||||
FROM ' . CONFIG_TABLE . "
|
||||
WHERE config_name = '" . $db->sql_escape('search_type') . "'";
|
||||
$result = $db->sql_query($sql);
|
||||
$search_type = $db->sql_fetchfield('search_type');
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return $search_type;
|
||||
}
|
||||
|
||||
protected function remove_user_group($group_name, $usernames)
|
||||
{
|
||||
global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $user, $phpbb_root_path, $phpEx;
|
||||
|
|
Loading…
Add table
Reference in a new issue