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 \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
|
* Get a list of quote authors, limited to the outermost quotes
|
||||||
*
|
*
|
||||||
|
|
|
@ -28,6 +28,18 @@ interface utils_interface
|
||||||
*/
|
*/
|
||||||
public function clean_formatting($text);
|
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
|
* Get a list of quote authors, limited to the outermost quotes
|
||||||
*
|
*
|
||||||
|
|
|
@ -1597,7 +1597,11 @@ if ($generate_quote)
|
||||||
{
|
{
|
||||||
if ($config['allow_bbcode'])
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,6 +72,20 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
||||||
$this->assertContains('😀', $crawler->text());
|
$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
|
* @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
|
* @dataProvider get_remove_bbcode_tests
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue