Skip to content

Commit 70cd911

Browse files
committed
[ticket/13803] Added tests
PHPBB3-13803
1 parent 9bf0f79 commit 70cd911

4 files changed

Lines changed: 149 additions & 13 deletions

File tree

phpBB/phpbb/textreparser/base.php

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ protected function add_missing_fields(array $record)
4343
if (!isset($record['enable_bbcode'], $record['enable_smilies'], $record['enable_magic_url']))
4444
{
4545
$record += array(
46-
'enable_bbcode' => !empty($record['bbcode_uid']),
46+
'enable_bbcode' => $this->guess_bbcodes($record),
4747
'enable_smilies' => $this->guess_smilies($record),
4848
'enable_magic_url' => $this->guess_magic_url($record),
4949
);
@@ -58,6 +58,13 @@ protected function add_missing_fields(array $record)
5858
$record[$field_name] = $this->guess_bbcode($record, $bbcode);
5959
}
6060

61+
// Magic URLs are tied to the URL BBCode, that's why if magic URLs are enabled we make sure
62+
// that the URL BBCode is also enabled
63+
if ($record['enable_magic_url'])
64+
{
65+
$record['enable_url_bbcode'] = true;
66+
}
67+
6168
return $record;
6269
}
6370

@@ -74,7 +81,7 @@ protected function guess_bbcode(array $record, $bbcode)
7481
{
7582
// Look for the closing tag, e.g. [/url]
7683
$match = '[/' . $bbcode . ':' . $record['bbcode_uid'];
77-
if (stripos($record['text'], $match) !== false)
84+
if (strpos($record['text'], $match) !== false)
7885
{
7986
return true;
8087
}
@@ -84,8 +91,8 @@ protected function guess_bbcode(array $record, $bbcode)
8491
{
8592
// Look for the closing tag inside of a e element, in an element of the same name, e.g.
8693
// <e>[/url]</e></URL>
87-
$match = '<e>[/' . $bbcode . ']</e></' . $bbcode . '>';
88-
if (stripos($record['text'], $match) !== false)
94+
$match = '<e>[/' . $bbcode . ']</e></' . strtoupper($bbcode) . '>';
95+
if (strpos($record['text'], $match) !== false)
8996
{
9097
return true;
9198
}
@@ -94,6 +101,33 @@ protected function guess_bbcode(array $record, $bbcode)
94101
return false;
95102
}
96103

104+
/**
105+
* Guess whether any BBCode is in use in given record
106+
*
107+
* @param array $record
108+
* @return bool
109+
*/
110+
protected function guess_bbcodes(array $record)
111+
{
112+
if (!empty($record['bbcode_uid']))
113+
{
114+
// Test whether the bbcode_uid is in use
115+
$match = ':' . $record['bbcode_uid'];
116+
if (strpos($record['text'], $match) !== false)
117+
{
118+
return true;
119+
}
120+
}
121+
122+
if (substr($record['text'], 0, 2) == '<r')
123+
{
124+
// Look for a closing tag inside of an e element
125+
return (bool) preg_match('(<e>\\[/\\w+\\]</e>)', $match);
126+
}
127+
128+
return false;
129+
}
130+
97131
/**
98132
* Guess whether magic URLs are in use in given record
99133
*
@@ -103,7 +137,7 @@ protected function guess_bbcode(array $record, $bbcode)
103137
protected function guess_magic_url(array $record)
104138
{
105139
// Look for <!-- m --> or for a URL tag that's not immediately followed by <s>
106-
return (strpos($record['text'], '<!-- m -->') !== false || preg_match('(<URL [^>]++>(?!<s>))', strpos($row['text'])));
140+
return (strpos($record['text'], '<!-- m -->') !== false || preg_match('(<URL [^>]++>(?!<s>))', $record['text']));
107141
}
108142

109143
/**
@@ -114,7 +148,7 @@ protected function guess_magic_url(array $record)
114148
*/
115149
protected function guess_smilies(array $record)
116150
{
117-
return (strpos($row['text'], '<!-- s') !== false || strpos($row['text'], '<E>') !== false);
151+
return (strpos($record['text'], '<!-- s') !== false || strpos($record['text'], '<E>') !== false);
118152
}
119153

120154
/**
@@ -143,8 +177,10 @@ protected function reparse_record(array $record)
143177
OPTION_FLAG_BBCODE | OPTION_FLAG_SMILIES | OPTION_FLAG_LINKS
144178
)
145179
);
180+
// generate_text_for_edit() and decode_message() actually return the text as HTML. It has to
181+
// be decoded to plain text before it can be reparsed
182+
$parsed_text = html_entity_decode($unparsed['text'], ENT_QUOTES, 'UTF-8');
146183
$bitfield = $flags = null;
147-
$parsed_text = $unparsed['text'];
148184
generate_text_for_storage(
149185
$parsed_text,
150186
$unparsed['bbcode_uid'],

tests/text_reparser/fixtures/posts.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,38 @@
4747
<value><![CDATA[[b]Not bold[/b] :) <!-- m --><a class="postlink" href="http://example.org">http://example.org</a><!-- m -->]]></value>
4848
<value>abcd1234</value>
4949
</row>
50+
<row>
51+
<value>6</value>
52+
<value>1</value>
53+
<value>1</value>
54+
<value>0</value>
55+
<value><![CDATA[[flash=123,345:abcd1234]http&#58;//example&#46;org/flash&#46;swf[/flash:abcd1234]]]></value>
56+
<value>abcd1234</value>
57+
</row>
58+
<row>
59+
<value>7</value>
60+
<value>1</value>
61+
<value>1</value>
62+
<value>0</value>
63+
<value><![CDATA[[flash=123,345]http://example.org/flash.swf[/flash]]]></value>
64+
<value>abcd1234</value>
65+
</row>
66+
<row>
67+
<value>8</value>
68+
<value>1</value>
69+
<value>1</value>
70+
<value>0</value>
71+
<value><![CDATA[[img:abcd1234]http&#58;//example&#46;org/img&#46;png[/img:abcd1234]]]></value>
72+
<value>abcd1234</value>
73+
</row>
74+
<row>
75+
<value>9</value>
76+
<value>1</value>
77+
<value>1</value>
78+
<value>0</value>
79+
<value><![CDATA[[img]http://example.org/img.png[/img]]]></value>
80+
<value>abcd1234</value>
81+
</row>
5082
<row>
5183
<value>1000</value>
5284
<value>1</value>

tests/text_reparser/fixtures/privmsgs.xml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,46 @@
5959
<value></value>
6060
<value></value>
6161
</row>
62+
<row>
63+
<value>6</value>
64+
<value>1</value>
65+
<value>1</value>
66+
<value>0</value>
67+
<value><![CDATA[[flash=123,345:abcd1234]http&#58;//example&#46;org/flash&#46;swf[/flash:abcd1234]]]></value>
68+
<value>abcd1234</value>
69+
<value></value>
70+
<value></value>
71+
</row>
72+
<row>
73+
<value>7</value>
74+
<value>1</value>
75+
<value>1</value>
76+
<value>0</value>
77+
<value><![CDATA[[flash=123,345]http://example.org/flash.swf[/flash]]]></value>
78+
<value>abcd1234</value>
79+
<value></value>
80+
<value></value>
81+
</row>
82+
<row>
83+
<value>8</value>
84+
<value>1</value>
85+
<value>1</value>
86+
<value>0</value>
87+
<value><![CDATA[[img:abcd1234]http&#58;//example&#46;org/img&#46;png[/img:abcd1234]]]></value>
88+
<value>abcd1234</value>
89+
<value></value>
90+
<value></value>
91+
</row>
92+
<row>
93+
<value>9</value>
94+
<value>1</value>
95+
<value>1</value>
96+
<value>0</value>
97+
<value><![CDATA[[img]http://example.org/img.png[/img]]]></value>
98+
<value>abcd1234</value>
99+
<value></value>
100+
<value></value>
101+
</row>
62102
<row>
63103
<value>1000</value>
64104
<value>1</value>

tests/text_reparser/test_row_based_plugin.php

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,31 +62,59 @@ public function getReparseTests()
6262
5,
6363
array(
6464
array(
65-
'id' => 1,
65+
'id' => '1',
6666
'text' => 'This row should be [b]ignored[/b]',
6767
),
6868
array(
69-
'id' => 2,
69+
'id' => '2',
7070
'text' => '<t>[b]Not bold[/b] :) http://example.org</t>',
7171
),
7272
array(
73-
'id' => 3,
73+
'id' => '3',
7474
'text' => '<r><B><s>[b]</s>Bold<e>[/b]</e></B> :) http://example.org</r>',
7575
),
7676
array(
77-
'id' => 4,
77+
'id' => '4',
7878
'text' => '<r>[b]Not bold[/b] <E>:)</E> http://example.org</r>',
7979
),
8080
array(
81-
'id' => 5,
81+
'id' => '5',
8282
'text' => '<r>[b]Not bold[/b] :) <URL url="http://example.org">http://example.org</URL></r>',
8383
),
8484
array(
85-
'id' => 1000,
85+
'id' => '1000',
8686
'text' => 'This row should be [b]ignored[/b]',
8787
),
8888
)
8989
),
90+
array(
91+
6,
92+
7,
93+
array(
94+
array(
95+
'id' => '6',
96+
'text' => '<r><FLASH height="345" url="http://example.org/flash.swf" width="123"><s>[flash=123,345]</s>http://example.org/flash.swf<e>[/flash]</e></FLASH></r>',
97+
),
98+
array(
99+
'id' => '7',
100+
'text' => '<t>[flash=123,345]http://example.org/flash.swf[/flash]</t>',
101+
),
102+
)
103+
),
104+
array(
105+
8,
106+
9,
107+
array(
108+
array(
109+
'id' => '8',
110+
'text' => '<r><IMG src="http://example.org/img.png"><s>[img]</s>http://example.org/img.png<e>[/img]</e></IMG></r>',
111+
),
112+
array(
113+
'id' => '9',
114+
'text' => '<t>[img]http://example.org/img.png[/img]</t>',
115+
),
116+
)
117+
),
90118
);
91119
}
92120
}

0 commit comments

Comments
 (0)