Moved trim_message tool to includes folder

Suggested by nickvergessen
Added htmlspecialchars_decode for $message
This commit is contained in:
Marc Alexander
2012-01-01 13:46:04 +01:00
parent 83c64b941c
commit 96391cf873
4 changed files with 63 additions and 12 deletions

View File

@@ -194,6 +194,7 @@ Weitere Sprachen kannst in unserem Internationalen Forum finden: http://www.boar
<file from="root/adm/mods/board3_portal_check_version.php" to="adm/mods/board3_portal_check_version.php" /> <file from="root/adm/mods/board3_portal_check_version.php" to="adm/mods/board3_portal_check_version.php" />
<file from="root/adm/style/*.*" to="adm/style/*.*" /> <file from="root/adm/style/*.*" to="adm/style/*.*" />
<file from="root/includes/acp/*.*" to="includes/acp/*.*" /> <file from="root/includes/acp/*.*" to="includes/acp/*.*" />
<file from="root/includes/trim_message/*.*" to="includes/trim_message/*.*" />
<file from="root/install/index.php" to="install/index.php" /> <file from="root/install/index.php" to="install/index.php" />
<file from="root/language/en/mods/*.*" to="language/en/mods/*.*" /> <file from="root/language/en/mods/*.*" to="language/en/mods/*.*" />
<file from="root/portal/*.*" to="portal/*.*" /> <file from="root/portal/*.*" to="portal/*.*" />

View File

@@ -8,7 +8,7 @@
* @package trim_message * @package trim_message
* @copyright 2011 * @copyright 2011
* @license http://opensource.org/licenses/gpl-license.php GNU Public License * @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version 1.0 * @version 1.1
*/ */
/** /**
@@ -24,6 +24,14 @@ if (!defined('IN_PHPBB'))
*/ */
class phpbb_trim_message_bbcodes class phpbb_trim_message_bbcodes
{ {
/**
* Some BBCodes, such as img and flash should not be split up in their middle.
* So I added a sensitive BBCode array which protects BBCodes from being split.
* You can also need to add your custom bbcodes in here.
*/
private $sensitive_bbcodes = array('url', 'flash', 'flash=', 'attachment', 'attachment=', 'img', 'email', 'email=');
private $is_sensitive = false;
/** /**
* Variables * Variables
*/ */
@@ -112,9 +120,23 @@ class phpbb_trim_message_bbcodes
} }
} }
} }
// Or the user just used a normal [ in his post.
else
{
$this->cur_content_length++;
$content_length = $this->get_content_length($exploded_parts[0]);
$max_content_allowed = ($this->max_content_length - $this->cur_content_length);
if (($content_length >= $max_content_allowed) && !$this->trim_position)
{
$allowed_content_position = $this->get_content_position($exploded_parts[0], $max_content_allowed);
$this->trim_position = $this->cur_position + $allowed_content_position;
}
$this->cur_content_length += $content_length;
$this->cur_position += utf8_strlen($exploded_parts[0]);
}
} }
/** /**
* Two element is hte normal case: * Two element is the normal case:
* String: [bbcode:uid]foobar * String: [bbcode:uid]foobar
* Keys: ^^^^^^ = 0 ^^^^^^ = 1 * Keys: ^^^^^^ = 0 ^^^^^^ = 1
* String: [/bbcode:uid]foobar * String: [/bbcode:uid]foobar
@@ -122,17 +144,43 @@ class phpbb_trim_message_bbcodes
*/ */
elseif ($num_parts == 2) elseif ($num_parts == 2)
{ {
// We matched it something ;) /**
if ($exploded_parts[0][0] != '/') * We found an opening bracket in the quoted username which is not a bbcode
* String: [quote="odd[name":uid]quote-text
* Keys: ^^^^^ = 0 ^^^^^^^^^^ = 1
*/
if ($allow_close_quote && (utf8_substr($exploded_parts[0], -6) == '&quot;'))
{
$this->cur_position += utf8_strlen($exploded_parts[0]) + $bbcode_end_length;
$content_length = $this->get_content_length($exploded_parts[1]);
$max_content_allowed = ($this->max_content_length - $this->cur_content_length);
if (($content_length >= $max_content_allowed) && !$this->trim_position)
{
$allowed_content_position = $this->get_content_position($exploded_parts[1], $max_content_allowed);
$this->trim_position = $this->cur_position + $allowed_content_position;
}
$this->cur_content_length += $content_length;
$this->cur_position += utf8_strlen($exploded_parts[1]);
$allow_close_quote = false;
}
// We matched something ;)
else if ($exploded_parts[0][0] != '/')
{ {
// Open BBCode-tag // Open BBCode-tag
$bbcode_tag = $this->filter_bbcode_tag($exploded_parts[0]); $bbcode_tag = $this->filter_bbcode_tag($exploded_parts[0]);
$bbcode_tag_extended = $this->filter_bbcode_tag($exploded_parts[0], false, false);
if (in_array($bbcode_tag_extended, $this->sensitive_bbcodes))
{
$this->is_sensitive = true;
}
$this->open_bbcode($bbcode_tag, $this->cur_position); $this->open_bbcode($bbcode_tag, $this->cur_position);
$this->cur_position += utf8_strlen($exploded_parts[0]) + $bbcode_end_length; $this->cur_position += utf8_strlen($exploded_parts[0]) + $bbcode_end_length;
$this->bbcode_action($bbcode_tag, 'open_end', $this->cur_position); $this->bbcode_action($bbcode_tag, 'open_end', $this->cur_position);
if (!$allow_close_quote) if (!$allow_close_quote && !$this->is_sensitive)
{ {
// If we allow a closing quote, we are in the username. // If we allow a closing quote, we are in the username.
// We do not count that as content-length. // We do not count that as content-length.
@@ -156,6 +204,7 @@ class phpbb_trim_message_bbcodes
{ {
$bbcode_tag_extended = ''; $bbcode_tag_extended = '';
} }
$this->is_sensitive = false;
$this->bbcode_action($bbcode_tag, 'close_start', $this->cur_position); $this->bbcode_action($bbcode_tag, 'close_start', $this->cur_position);
$this->cur_position += utf8_strlen($exploded_parts[0]) + $bbcode_end_length; $this->cur_position += utf8_strlen($exploded_parts[0]) + $bbcode_end_length;
@@ -313,7 +362,8 @@ class phpbb_trim_message_bbcodes
static public function get_content_length($content) static public function get_content_length($content)
{ {
$content_length = utf8_strlen($content); $content_length = utf8_strlen($content);
$last_html_opening = $last_html_closing = $last_smiley = false; $last_smiley = false;
$last_html_opening = $last_html_closing = 0;
while (($last_html_opening = utf8_strpos($content, '<', $last_html_closing)) !== false) while (($last_html_opening = utf8_strpos($content, '<', $last_html_closing)) !== false)
{ {
$last_html_closing = utf8_strpos($content, '>', $last_html_opening); $last_html_closing = utf8_strpos($content, '>', $last_html_opening);
@@ -395,7 +445,7 @@ class phpbb_trim_message_bbcodes
* *
* @return string plain bbcode-tag * @return string plain bbcode-tag
*/ */
static public function filter_bbcode_tag($bbcode_tag, $strip_information = true) static public function filter_bbcode_tag($bbcode_tag, $strip_information = true, $strip_equal = true)
{ {
if ($bbcode_tag[0] == '/') if ($bbcode_tag[0] == '/')
{ {
@@ -412,9 +462,9 @@ class phpbb_trim_message_bbcodes
return 'list'; return 'list';
} }
if ($strip_information && (($equals = utf8_strpos($bbcode_tag, '=')) !== false)) if (($strip_information || !$strip_equal) && (($equals = utf8_strpos($bbcode_tag, '=')) !== false))
{ {
$bbcode_tag = utf8_substr($bbcode_tag, 0, $equals); $bbcode_tag = utf8_substr($bbcode_tag, 0, (!$strip_equal) ? $equals + 1 : $equals);
} }
return $bbcode_tag; return $bbcode_tag;

View File

@@ -49,7 +49,7 @@ class phpbb_trim_message
*/ */
public function __construct($message, $bbcode_uid, $length, $append_str = ' [...]', $tolerance = 25) public function __construct($message, $bbcode_uid, $length, $append_str = ' [...]', $tolerance = 25)
{ {
$this->message = $message; $this->message = htmlspecialchars_decode($message);
$this->bbcode_uid = $bbcode_uid; $this->bbcode_uid = $bbcode_uid;
$this->append_str = $append_str; $this->append_str = $append_str;
$this->length = (int) $length; $this->length = (int) $length;

View File

@@ -403,12 +403,12 @@ function get_sub_taged_string($message, $bbcode_uid, $length)
if(!class_exists('phpbb_trim_message')) if(!class_exists('phpbb_trim_message'))
{ {
include(PORTAL_ROOT_PATH . 'includes/trim_message/trim_message.' . $phpEx); include($phpbb_root_path . 'includes/trim_message/trim_message.' . $phpEx);
} }
if(!class_exists('phpbb_trim_message_bbcodes')) if(!class_exists('phpbb_trim_message_bbcodes'))
{ {
include(PORTAL_ROOT_PATH . 'includes/trim_message/bbcodes.' . $phpEx); include($phpbb_root_path . 'includes/trim_message/bbcodes.' . $phpEx);
} }
$object = new phpbb_trim_message($message, $bbcode_uid, $length); $object = new phpbb_trim_message($message, $bbcode_uid, $length);