mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-07 20:08:53 +00:00
[ticket/10423] Move code into a function and add tests for it
PHPBB3-10423
This commit is contained in:
parent
02378e94e7
commit
face175471
4 changed files with 60 additions and 5 deletions
|
@ -21,6 +21,7 @@ if (!defined('IN_PHPBB'))
|
||||||
* make_jumpbox()
|
* make_jumpbox()
|
||||||
* bump_topic_allowed()
|
* bump_topic_allowed()
|
||||||
* get_context()
|
* get_context()
|
||||||
|
* phpbb_clean_search_string()
|
||||||
* decode_message()
|
* decode_message()
|
||||||
* strip_bbcode()
|
* strip_bbcode()
|
||||||
* generate_text_for_display()
|
* generate_text_for_display()
|
||||||
|
@ -360,6 +361,23 @@ function get_context($text, $words, $length = 400)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleans a search string by removing single wildcards from it and replacing multiple spaces with a single one.
|
||||||
|
*
|
||||||
|
* @param string $search_string The full search string which should be cleaned.
|
||||||
|
*
|
||||||
|
* @return string The cleaned search string without any wildcards and multiple spaces.
|
||||||
|
*/
|
||||||
|
function phpbb_clean_search_string($search_string)
|
||||||
|
{
|
||||||
|
// This regular expressions matches every single wildcard.
|
||||||
|
// That means one after a whitespace or the beginning of the string or one before a whitespace or the end of the string.
|
||||||
|
$search_string = preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', $search_string);
|
||||||
|
$search_string = trim($search_string);
|
||||||
|
$search_string = preg_replace('#\s+#u', ' ', $search_string);
|
||||||
|
return $search_string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decode text whereby text is coming from the db and expected to be pre-parsed content
|
* Decode text whereby text is coming from the db and expected to be pre-parsed content
|
||||||
* We are placing this outside of the message parser because we are often in need of it...
|
* We are placing this outside of the message parser because we are often in need of it...
|
||||||
|
|
|
@ -574,9 +574,9 @@ if ($keywords || $author || $author_id || $search_id || $submit)
|
||||||
}
|
}
|
||||||
|
|
||||||
// define some vars for urls
|
// define some vars for urls
|
||||||
// A single wildcard will destroy the search query
|
// A single wildcard will make the search results look ugly
|
||||||
$hilit = trim(preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', str_replace(array('+', '-', '|', '(', ')', '"'), ' ', $keywords)));
|
$hilit = phpbb_clean_search_string(str_replace(array('+', '-', '|', '(', ')', '"'), ' ', $keywords));
|
||||||
$hilit = implode('|', explode(' ', preg_replace('#\s+#u', ' ', $hilit)));
|
$hilit = str_replace(' ', '|', $hilit);
|
||||||
|
|
||||||
$u_hilit = urlencode(htmlspecialchars_decode(str_replace('|', ' ', $hilit)));
|
$u_hilit = urlencode(htmlspecialchars_decode(str_replace('|', ' ', $hilit)));
|
||||||
$u_show_results = '&sr=' . $show_results;
|
$u_show_results = '&sr=' . $show_results;
|
||||||
|
@ -840,7 +840,7 @@ if ($keywords || $author || $author_id || $search_id || $submit)
|
||||||
$hilit_array = array_filter(explode('|', $hilit), 'strlen');
|
$hilit_array = array_filter(explode('|', $hilit), 'strlen');
|
||||||
foreach ($hilit_array as $key => $value)
|
foreach ($hilit_array as $key => $value)
|
||||||
{
|
{
|
||||||
$hilit_array[$key] = preg_replace('#\s+#u', ' ', trim(preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', $value)));
|
$hilit_array[$key] = phpbb_clean_search_string($value);
|
||||||
$hilit_array[$key] = str_replace('\*', '\w*?', preg_quote($hilit_array[$key], '#'));
|
$hilit_array[$key] = str_replace('\*', '\w*?', preg_quote($hilit_array[$key], '#'));
|
||||||
$hilit_array[$key] = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $hilit_array[$key]);
|
$hilit_array[$key] = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $hilit_array[$key]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -475,7 +475,7 @@ if ($hilit_words)
|
||||||
{
|
{
|
||||||
if (trim($word))
|
if (trim($word))
|
||||||
{
|
{
|
||||||
$word = preg_replace('#\s+#u', ' ', trim(preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', $word)));
|
$word = phpbb_clean_search_string($word);
|
||||||
$word = str_replace('\*', '\w+?', preg_quote($word, '#'));
|
$word = str_replace('\*', '\w+?', preg_quote($word, '#'));
|
||||||
$word = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $word);
|
$word = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $word);
|
||||||
$highlight_match .= (($highlight_match != '' && $word != '') ? '|' : '') . $word;
|
$highlight_match .= (($highlight_match != '' && $word != '') ? '|' : '') . $word;
|
||||||
|
|
37
tests/functions_content/phpbb_clean_search_string_test.php
Normal file
37
tests/functions_content/phpbb_clean_search_string_test.php
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package testing
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||||
|
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php';
|
||||||
|
|
||||||
|
class phpbb_functions_content_phpbb_clean_search_string_test extends phpbb_test_case
|
||||||
|
{
|
||||||
|
public function phpbb_clean_search_string_data()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array('*', ''),
|
||||||
|
array('* *', ''),
|
||||||
|
array('test', 'test'),
|
||||||
|
array(' test ', 'test'),
|
||||||
|
array(' test * ', 'test'),
|
||||||
|
array('test* *', 'test*'),
|
||||||
|
array('* *test*', '*test*'),
|
||||||
|
array('test test * test', 'test test test'),
|
||||||
|
array(' some wild*cards * between wo*rds ', 'some wild*cards between wo*rds'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider phpbb_clean_search_string_data
|
||||||
|
*/
|
||||||
|
public function test_phpbb_clean_search_string($search_string, $expected)
|
||||||
|
{
|
||||||
|
$this->assertEquals($expected, phpbb_clean_search_string($search_string));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue