mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-10 05:18:52 +00:00
[ticket/13847] Move quote generation to text_formatter.utils
PHPBB3-13847
This commit is contained in:
parent
6337407192
commit
8a077e0e94
5 changed files with 119 additions and 1 deletions
|
@ -34,6 +34,43 @@ class utils implements \phpbb\textformatter\utils_interface
|
|||
return \s9e\TextFormatter\Utils::removeFormatting($xml);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return given string between quotes
|
||||
*
|
||||
* Will use either single- or double- quotes depending on whichever requires to be escaped.
|
||||
* Quotes and backslashes are escaped with backslashes where necessary
|
||||
*
|
||||
* @param string $str Original string
|
||||
* @return string Escaped string within quotes
|
||||
*/
|
||||
protected function enquote($str)
|
||||
{
|
||||
$quote = (strpos($str, '"') === false || strpos($str, "'") !== false) ? '"' : "'";
|
||||
|
||||
return $quote . addcslashes($str, '\\' . $quote) . $quote;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function generate_quote($text, array $attributes = array())
|
||||
{
|
||||
$quote = '[quote';
|
||||
if (isset($attributes['author']))
|
||||
{
|
||||
// Add the author as the BBCode's default attribute
|
||||
$quote .= '=' . $this->enquote($attributes['author']);
|
||||
unset($attributes['author']);
|
||||
}
|
||||
foreach ($attributes as $name => $value)
|
||||
{
|
||||
$quote .= ' ' . $name . '=' . $this->enquote($value);
|
||||
}
|
||||
$quote .= ']' . $text . '[/quote]';
|
||||
|
||||
return $quote;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of quote authors, limited to the outermost quotes
|
||||
*
|
||||
|
|
|
@ -28,6 +28,18 @@ interface utils_interface
|
|||
*/
|
||||
public function clean_formatting($text);
|
||||
|
||||
/**
|
||||
* Create a quote block for given text
|
||||
*
|
||||
* Possible attributes:
|
||||
* - author
|
||||
*
|
||||
* @param string $text Quote's text
|
||||
* @param array $attributes Quote's attributes
|
||||
* @return string Quote block to be used in a new post/text
|
||||
*/
|
||||
public function generate_quote($text, array $attributes = array());
|
||||
|
||||
/**
|
||||
* Get a list of quote authors, limited to the outermost quotes
|
||||
*
|
||||
|
|
|
@ -1597,7 +1597,11 @@ if ($generate_quote)
|
|||
{
|
||||
if ($config['allow_bbcode'])
|
||||
{
|
||||
$message_parser->message = '[quote="' . $post_data['quote_username'] . '"]' . censor_text(trim($message_parser->message)) . "[/quote]\n";
|
||||
$message_parser->message = $phpbb_container->get('text_formatter.utils')->generate_quote(
|
||||
censor_text(trim($message_parser->message)),
|
||||
array('author' => $post_data['quote_username'])
|
||||
);
|
||||
$message_parser->message .= "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -72,6 +72,20 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
|||
$this->assertContains('😀', $crawler->text());
|
||||
}
|
||||
|
||||
public function test_quote()
|
||||
{
|
||||
$text = 'Test post </textarea>"\' &&amp;';
|
||||
$expected = '[quote="admin"]' . $text . '[/quote]';
|
||||
|
||||
$this->login();
|
||||
$topic = $this->create_topic(2, 'Test Topic 1', 'Test topic');
|
||||
$post = $this->create_post(2, $topic['topic_id'], 'Re: Test Topic 1', $text);
|
||||
|
||||
$crawler = self::request('GET', "posting.php?mode=quote&f=2&t={$post['topic_id']}&p={$post['post_id']}&sid={$this->sid}");
|
||||
|
||||
$this->assertContains($expected, $crawler->filter('textarea#message')->text());
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox max_quote_depth is applied to the text populating the posting form
|
||||
*/
|
||||
|
|
|
@ -108,6 +108,57 @@ class phpbb_textformatter_s9e_utils_test extends phpbb_test_case
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_generate_quote_tests
|
||||
*/
|
||||
public function test_generate_quote($text, $params, $expected)
|
||||
{
|
||||
$container = $this->get_test_case_helpers()->set_s9e_services();
|
||||
$utils = $container->get('text_formatter.utils');
|
||||
|
||||
$this->assertSame($expected, $utils->generate_quote($text, $params));
|
||||
}
|
||||
|
||||
public function get_generate_quote_tests()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'...',
|
||||
array(),
|
||||
'[quote]...[/quote]',
|
||||
),
|
||||
array(
|
||||
'...',
|
||||
array('author' => 'Brian Kibler'),
|
||||
'[quote="Brian Kibler"]...[/quote]',
|
||||
),
|
||||
array(
|
||||
'...',
|
||||
array('author' => 'Brian "Brian Kibler" Kibler of Brian Kibler Gaming'),
|
||||
'[quote=\'Brian "Brian Kibler" Kibler of Brian Kibler Gaming\']...[/quote]',
|
||||
),
|
||||
array(
|
||||
'...',
|
||||
array('author' => "Brian Kibler Gaming's Brian Kibler"),
|
||||
'[quote="Brian Kibler Gaming\'s Brian Kibler"]...[/quote]',
|
||||
),
|
||||
array(
|
||||
'...',
|
||||
array('author' => "\\\"'"),
|
||||
'[quote="\\\\\\"\'"]...[/quote]',
|
||||
),
|
||||
array(
|
||||
'...',
|
||||
array(
|
||||
'author' => 'user',
|
||||
'post_id' => 123,
|
||||
'url' => 'http://example.org'
|
||||
),
|
||||
'[quote="user" post_id="123" url="http://example.org"]...[/quote]',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_remove_bbcode_tests
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue