From 5b8f9c74490f6d47fba5210c039d5e383239f11c Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Sat, 23 Jul 2016 20:32:17 +0200 Subject: [PATCH] Use optional parameter to enable BBCode -> HTML transform --- .../html/input/HtmlInputProcessor.class.php | 80 +++++++++---------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php b/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php index c8a879a024..478317c333 100644 --- a/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php +++ b/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php @@ -5,7 +5,6 @@ use wcf\system\html\input\filter\IHtmlInputFilter; use wcf\system\html\input\filter\MessageHtmlInputFilter; use wcf\system\html\input\node\HtmlInputNodeProcessor; use wcf\system\html\AbstractHtmlProcessor; -use wcf\system\WCF; use wcf\util\StringUtil; /** @@ -37,18 +36,21 @@ class HtmlInputProcessor extends AbstractHtmlProcessor { /** * Processes the input html string. * - * @param string $html html string - * @param string $objectType object type identifier - * @param integer $objectID object id + * @param string $html html string + * @param string $objectType object type identifier + * @param integer $objectID object id + * @param boolean $convertFromBBCode interpret input as bbcode */ - public function process($html, $objectType, $objectID = 0) { + public function process($html, $objectType, $objectID = 0, $convertFromBBCode = false) { $this->setContext($objectType, $objectID); // enforce consistent newlines $html = StringUtil::trim(StringUtil::unifyNewlines($html)); // check if this is true HTML or just a bbcode string - $html = $this->convertToHtml($html); + if ($convertFromBBCode) { + $html = $this->convertToHtml($html); + } // transform bbcodes into metacode markers $html = HtmlBBCodeParser::getInstance()->parse($html); @@ -157,48 +159,44 @@ class HtmlInputProcessor extends AbstractHtmlProcessor { * @return string parsed html string */ protected function convertToHtml($html) { - if (!preg_match('~^<[a-zA-Z\-]+~', $html) || !preg_match('~$~', $html)) { - $html = StringUtil::encodeHTML($html); - $parts = preg_split('~(\n+)~', $html, null, PREG_SPLIT_DELIM_CAPTURE); - - $openParagraph = false; - $html = ''; - for ($i = 0, $length = count($parts); $i < $length; $i++) { - $part = $parts[$i]; - if (strpos($part, "\n") !== false) { - $newlines = substr_count($part, "\n"); - if ($newlines === 1) { - $html .= '
'; - } - else { - if ($openParagraph) { - $html .= '

'; - $openParagraph = false; - } - - // ignore two newline because a new paragraph with bbcodes is created - // using two subsequent newlines - $newlines -= 2; - if ($newlines === 0) { - continue; - } - - $html .= str_repeat('


', $newlines); - } + $html = StringUtil::encodeHTML($html); + $parts = preg_split('~(\n+)~', $html, null, PREG_SPLIT_DELIM_CAPTURE); + + $openParagraph = false; + $html = ''; + for ($i = 0, $length = count($parts); $i < $length; $i++) { + $part = $parts[$i]; + if (strpos($part, "\n") !== false) { + $newlines = substr_count($part, "\n"); + if ($newlines === 1) { + $html .= '
'; } else { - if (!$openParagraph) { - $html .= '

'; + if ($openParagraph) { + $html .= '

'; + $openParagraph = false; + } + + // ignore two newline because a new paragraph with bbcodes is created + // using two subsequent newlines + $newlines -= 2; + if ($newlines === 0) { + continue; } - $html .= $part; - $openParagraph = true; + $html .= str_repeat('


', $newlines); + } + } + else { + if (!$openParagraph) { + $html .= '

'; } + + $html .= $part; + $openParagraph = true; } - - $html .= '

'; } - return $html; + return $html . '

'; } } -- 2.20.1