6285c3c9 |
1 | <?php |
2 | |
3 | namespace wcf\system\html\output\node; |
4 | |
5 | use wcf\system\html\node\AbstractHtmlNodeProcessor; |
6 | use wcf\system\html\node\HtmlNodeUnfurlLink; |
36d5d24e |
7 | use wcf\system\html\output\HtmlOutputProcessor; |
6285c3c9 |
8 | use wcf\system\message\embedded\object\MessageEmbeddedObjectManager; |
9 | use wcf\util\StringUtil; |
10 | |
11 | /** |
12 | * Node class to replace unfurled urls in the output. |
13 | * |
14 | * @author Joshua Ruesweg |
15 | * @copyright 2001-2021 WoltLab GmbH |
16 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
17 | * @package WoltLabSuite\Core\System\Html\Output\Node |
18 | * @since 5.4 |
19 | */ |
20 | class HtmlOutputUnfurlUrlNode extends AbstractHtmlOutputNode |
21 | { |
22 | /** |
23 | * @inheritDoc |
24 | */ |
25 | protected $tagName = 'a'; |
e54c5ad3 |
26 | |
6285c3c9 |
27 | /** |
28 | * @inheritDoc |
29 | */ |
30 | public function process(array $elements, AbstractHtmlNodeProcessor $htmlNodeProcessor) |
31 | { |
32 | /** @var \DOMElement $element */ |
33 | foreach ($elements as $element) { |
34 | $attribute = $element->getAttribute(HtmlNodeUnfurlLink::UNFURL_URL_ID_ATTRIBUTE_NAME); |
e54c5ad3 |
35 | if ( |
36 | $this->outputType === 'text/html' |
6285c3c9 |
37 | && !empty($attribute) |
e54c5ad3 |
38 | && MessageEmbeddedObjectManager::getInstance()->getObject('com.woltlab.wcf.unfurlUrl', $attribute) !== null |
39 | ) { |
36d5d24e |
40 | $enableUgc = true; |
41 | $processor = $htmlNodeProcessor->getHtmlProcessor(); |
42 | if ($processor instanceof HtmlOutputProcessor) { |
43 | $enableUgc = $processor->enableUgc; |
44 | } |
45 | |
6285c3c9 |
46 | $nodeIdentifier = StringUtil::getRandomID(); |
36d5d24e |
47 | $htmlNodeProcessor->addNodeData($this, $nodeIdentifier, [ |
48 | 'urlId' => $attribute, |
49 | 'enableUgc' => $enableUgc, |
50 | ]); |
e54c5ad3 |
51 | |
6285c3c9 |
52 | $htmlNodeProcessor->renameTag($element, 'wcfNode-' . $nodeIdentifier); |
53 | } |
54 | } |
55 | } |
e54c5ad3 |
56 | |
6285c3c9 |
57 | /** |
58 | * @inheritDoc |
59 | */ |
60 | public function replaceTag(array $data) |
61 | { |
36d5d24e |
62 | /** @var \wcf\data\unfurl\url\UnfurlUrl $object */ |
63 | $object = MessageEmbeddedObjectManager::getInstance()->getObject('com.woltlab.wcf.unfurlUrl', $data['urlId']); |
c2f65fac |
64 | |
36d5d24e |
65 | return $object->render($data['enableUgc']); |
6285c3c9 |
66 | } |
67 | } |