mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-07 20:08:53 +00:00
Merge branch '3.3.x'
This commit is contained in:
commit
241cd5f41a
3 changed files with 69 additions and 2 deletions
|
@ -201,8 +201,8 @@ abstract class base implements reparser_interface
|
||||||
*/
|
*/
|
||||||
protected function guess_magic_url(array $record)
|
protected function guess_magic_url(array $record)
|
||||||
{
|
{
|
||||||
// Look for <!-- m --> or for a URL tag that's not immediately followed by <s>
|
// Look for magic URL markers or for a URL tag that's not immediately followed by <s>
|
||||||
return (strpos($record['text'], '<!-- m -->') !== false || preg_match('(<URL [^>]++>(?!<s>))', $record['text']));
|
return preg_match('#<!-- ([lmwe]) -->.*?<!-- \1 -->#', $record['text']) || preg_match('(<URL [^>]++>(?!<s>))', $record['text']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -234,7 +234,10 @@ abstract class base implements reparser_interface
|
||||||
*/
|
*/
|
||||||
protected function reparse_record(array $record)
|
protected function reparse_record(array $record)
|
||||||
{
|
{
|
||||||
|
// Guess magic URL state based on actual record content before adding fields
|
||||||
|
$record['enable_magic_url'] = $this->guess_magic_url($record);
|
||||||
$record = $this->add_missing_fields($record);
|
$record = $this->add_missing_fields($record);
|
||||||
|
|
||||||
$flags = ($record['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0;
|
$flags = ($record['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0;
|
||||||
$flags |= ($record['enable_smilies']) ? OPTION_FLAG_SMILIES : 0;
|
$flags |= ($record['enable_smilies']) ? OPTION_FLAG_SMILIES : 0;
|
||||||
$flags |= ($record['enable_magic_url']) ? OPTION_FLAG_LINKS : 0;
|
$flags |= ($record['enable_magic_url']) ? OPTION_FLAG_LINKS : 0;
|
||||||
|
|
|
@ -23,4 +23,67 @@ class phpbb_textreparser_post_text_test extends phpbb_textreparser_test_row_base
|
||||||
{
|
{
|
||||||
return new \phpbb\textreparser\plugins\post_text($this->db, POSTS_TABLE);
|
return new \phpbb\textreparser\plugins\post_text($this->db, POSTS_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function data_reparse_url(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[ // Reparse the same
|
||||||
|
'<r><URL url="https://www.example.com">https://www.example.com</URL> and some more text test included</r>',
|
||||||
|
'<r><URL url="https://www.example.com">https://www.example.com</URL> and some more text test included</r>',
|
||||||
|
],
|
||||||
|
[ // Reparse without magic URL, shouldn't change
|
||||||
|
'https://www.example.com and some more text test included',
|
||||||
|
'<t>https://www.example.com and some more text test included</t>',
|
||||||
|
],
|
||||||
|
[ // Reparse new format without magic URL, shouldn't change
|
||||||
|
'<t>https://www.example.com and some more text test included</t>',
|
||||||
|
'<t>https://www.example.com and some more text test included</t>',
|
||||||
|
],
|
||||||
|
[ // Reparse with magic URL, should update to text formatter format
|
||||||
|
'Foo is <!-- m --><a class="postlink" href="https://symfony.com/doc/current/service_container.html">https://symfony.com/doc/current/service_container.html</a><!-- m --> good',
|
||||||
|
'<r>Foo is <URL url="https://symfony.com/doc/current/service_container.html">https://symfony.com/doc/current/service_container.html</URL> good</r>',
|
||||||
|
],
|
||||||
|
[ // Reparse new format with magic URL, shouldn't change
|
||||||
|
'<r>Foo is <URL url="https://symfony.com/doc/current/service_container.html">https://symfony.com/doc/current/service_container.html</URL> good</r>',
|
||||||
|
'<r>Foo is <URL url="https://symfony.com/doc/current/service_container.html">https://symfony.com/doc/current/service_container.html</URL> good</r>',
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider data_reparse_url
|
||||||
|
*/
|
||||||
|
public function test_reparse_url(string $input_text, string $expected_text)
|
||||||
|
{
|
||||||
|
foreach ([true, false] as $enable_magic_url)
|
||||||
|
{
|
||||||
|
$record = [
|
||||||
|
'enable_bbcode' => true,
|
||||||
|
'enable_smilies' => true,
|
||||||
|
'enable_magic_url' => $enable_magic_url,
|
||||||
|
'post_text' => $input_text,
|
||||||
|
'bbcode_uid' => '',
|
||||||
|
];
|
||||||
|
|
||||||
|
$sql = 'INSERT INTO ' . POSTS_TABLE . ' ' . $this->db->sql_build_array('INSERT', $record);
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
|
||||||
|
$record['id'] = $this->db->sql_last_inserted_id();
|
||||||
|
$record['text'] = $record['post_text'];
|
||||||
|
|
||||||
|
// Call reparse_record via reflection
|
||||||
|
$reparser = $this->get_reparser();
|
||||||
|
$reparser_reflection = new \ReflectionMethod($reparser, 'reparse_record');
|
||||||
|
$reparser_reflection->setAccessible(true);
|
||||||
|
$reparser_reflection->invoke($reparser, $record);
|
||||||
|
|
||||||
|
// Retrieve reparsed post text and compare with expectec
|
||||||
|
$sql = 'SELECT post_id, post_text FROM ' . POSTS_TABLE . ' WHERE post_id = ' . (int) $record['id'];
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
$actual_text = $this->db->sql_fetchfield('post_text');
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
$this->assertSame($expected_text, $actual_text);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ require_once __DIR__ . '/../../test_framework/phpbb_database_test_case.php';
|
||||||
|
|
||||||
abstract class phpbb_textreparser_test_row_based_plugin extends phpbb_database_test_case
|
abstract class phpbb_textreparser_test_row_based_plugin extends phpbb_database_test_case
|
||||||
{
|
{
|
||||||
|
/** @var \phpbb\db\driver\driver_interface */
|
||||||
protected $db;
|
protected $db;
|
||||||
|
|
||||||
abstract protected function get_reparser();
|
abstract protected function get_reparser();
|
||||||
|
|
Loading…
Add table
Reference in a new issue