mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
[ticket/13803] Added methods to detect whether a given feature is in use
They test whether a given BBCode was enabled and has been used in a text, or smilies, or magic URLs. PHPBB3-13803
This commit is contained in:
parent
459f1d4c1f
commit
ea445ffa47
2 changed files with 67 additions and 2 deletions
|
@ -29,6 +29,62 @@ abstract class base implements reparser_interface
|
||||||
*/
|
*/
|
||||||
abstract protected function get_records($min_id, $max_id);
|
abstract protected function get_records($min_id, $max_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guess whether given BBCode is in use in given record
|
||||||
|
*
|
||||||
|
* @param array $record
|
||||||
|
* @param string $bbcode
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function guess_bbcode(array $record, $bbcode)
|
||||||
|
{
|
||||||
|
if (!empty($record['bbcode_uid']))
|
||||||
|
{
|
||||||
|
// Look for the closing tag, e.g. [/url]
|
||||||
|
$match = '[/' . $bbcode . ':' . $record['bbcode_uid'];
|
||||||
|
if (stripos($record['text'], $match) !== false)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($record['text'], 0, 2) == '<r')
|
||||||
|
{
|
||||||
|
// Look for the closing tag inside of a e element, in an element of the same name, e.g.
|
||||||
|
// <e>[/url]</e></URL>
|
||||||
|
$match = '<e>[/' . $bbcode . ']</e></' . $bbcode . '>';
|
||||||
|
if (stripos($record['text'], $match) !== false)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guess whether magic URLs are in use in given record
|
||||||
|
*
|
||||||
|
* @param array $record
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function guess_magic_url(array $record)
|
||||||
|
{
|
||||||
|
// Look for <!-- m --> or for a URL tag that's not immediately followed by <s>
|
||||||
|
return (strpos($record['text'], '<!-- m -->') !== false || preg_match('(<URL [^>]++>(?!<s>))', strpos($row['text'])));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guess whether smilies are in use in given record
|
||||||
|
*
|
||||||
|
* @param array $record
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function guess_smilies(array $record)
|
||||||
|
{
|
||||||
|
return (strpos($row['text'], '<!-- s') !== false || strpos($row['text'], '<E>') !== false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -59,11 +59,20 @@ abstract class row_based_plugin extends base
|
||||||
{
|
{
|
||||||
$row += array(
|
$row += array(
|
||||||
'enable_bbcode' => !empty($row['bbcode_uid']),
|
'enable_bbcode' => !empty($row['bbcode_uid']),
|
||||||
'enable_smilies' => (strpos($row['text'], '<!-- s') !== false),
|
'enable_smilies' => $this->guess_smilies($row),
|
||||||
'enable_magic_url' => (strpos($row['text'], '<!-- m -->') !== false),
|
'enable_magic_url' => $this->guess_magic_url($row),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Those BBCodes are disabled based on context and user permissions and that value is never
|
||||||
|
// stored in the database. Here we test whether they were used in the original text.
|
||||||
|
$bbcodes = array('flash', 'img', 'quote', 'url');
|
||||||
|
foreach ($bbcodes as $bbcode)
|
||||||
|
{
|
||||||
|
$field_name = 'enable_' . $bbcode;
|
||||||
|
$row[$field_name] = $this->guess_bbcode($row, $bbcode);
|
||||||
|
}
|
||||||
|
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue