Properly handling bbcodes with content being treated as source
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / html / output / node / HtmlOutputNodeWoltlabMetacode.class.php
1 <?php
2 namespace wcf\system\html\output\node;
3 use wcf\system\bbcode\HtmlBBCodeParser;
4 use wcf\system\html\node\AbstractHtmlNodeProcessor;
5 use wcf\util\StringUtil;
6
7 /**
8 * Processes bbcodes represented by `<woltlab-metacode>`.
9 *
10 * @author Alexander Ebert
11 * @copyright 2001-2016 WoltLab GmbH
12 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
13 * @package WoltLabSuite\Core\System\Html\Output\Node
14 * @since 3.0
15 */
16 class HtmlOutputNodeWoltlabMetacode extends AbstractHtmlOutputNode {
17 /**
18 * @inheritDoc
19 */
20 protected $tagName = 'woltlab-metacode';
21
22 /**
23 * @inheritDoc
24 */
25 public function process(array $elements, AbstractHtmlNodeProcessor $htmlNodeProcessor) {
26 /** @var \DOMElement $element */
27 foreach ($elements as $element) {
28 $name = $element->getAttribute('data-name');
29 $attributes = $element->getAttribute('data-attributes');
30
31 $nodeIdentifier = StringUtil::getRandomID();
32
33 $element = $htmlNodeProcessor->renameTag($element, 'wcfNode-' . $nodeIdentifier);
34
35 $htmlNodeProcessor->addNodeData($this, $nodeIdentifier, [
36 'name' => $name,
37 'attributes' => $htmlNodeProcessor->parseAttributes($attributes),
38 'element' => $element
39 ]);
40 }
41 }
42
43 /**
44 * @inheritDoc
45 */
46 public function replaceTag(array $data) {
47 HtmlBBCodeParser::getInstance()->setOutputType($this->outputType);
48
49 return HtmlBBCodeParser::getInstance()->getHtmlOutput($data['name'], $data['attributes'], $data['element']);
50 }
51 }