Add Unfurl Url Embedded Object
authorjoshuaruesweg <ruesweg@woltlab.com>
Tue, 23 Feb 2021 10:54:57 +0000 (11:54 +0100)
committerjoshuaruesweg <ruesweg@woltlab.com>
Tue, 16 Mar 2021 15:19:12 +0000 (16:19 +0100)
com.woltlab.wcf/objectType.xml
wcfsetup/install/files/lib/system/message/embedded/object/UnfurlUrlEmbeddedObjectHandler.class.php [new file with mode: 0644]

index f5e5569c74986d482b3e18c62c2c9bc76fddb2de..78b99d56b64cbc7278a61c65edc581e0b8a678bf 100644 (file)
                        <definitionname>com.woltlab.wcf.message.embeddedObject</definitionname>
                        <classname>wcf\system\message\embedded\object\ArticleMessageEmbeddedObjectHandler</classname>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.unfurlUrl</name>
+                       <definitionname>com.woltlab.wcf.message.embeddedObject</definitionname>
+                       <classname>wcf\system\message\embedded\object\UnfurlUrlEmbeddedObjectHandler</classname>
+               </type>
                <!-- embedded object handlers -->
                <type>
                        <name>com.woltlab.wcf.payment.method.paypal</name>
diff --git a/wcfsetup/install/files/lib/system/message/embedded/object/UnfurlUrlEmbeddedObjectHandler.class.php b/wcfsetup/install/files/lib/system/message/embedded/object/UnfurlUrlEmbeddedObjectHandler.class.php
new file mode 100644 (file)
index 0000000..b5c30ee
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+
+namespace wcf\system\message\embedded\object;
+
+use wcf\data\unfurl\url\UnfurlUrlList;
+use wcf\system\html\input\HtmlInputProcessor;
+use wcf\system\html\node\HtmlNodeUnfurlLink;
+
+/**
+ * Represents the unfurl url embedded object handlers.
+ *
+ * @author             Joshua Ruesweg
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\System\Message\Embedded\Object
+ * @since      5.4
+ */
+class UnfurlUrlEmbeddedObjectHandler extends AbstractMessageEmbeddedObjectHandler
+{
+    /**
+     * @inheritDoc
+     */
+    public function loadObjects(array $objectIDs)
+    {
+        $urlList = new UnfurlUrlList();
+        $urlList->getConditionBuilder()->add('unfurl_url.urlID IN (?)', [$objectIDs]);
+        $urlList->readObjects();
+
+        return $urlList->getObjects();
+    }
+    
+    /**
+     * @inheritDoc
+     */
+    public function parse(HtmlInputProcessor $htmlInputProcessor, array $embeddedData)
+    {
+        $unfurlUrlIDs = [];
+        foreach ($htmlInputProcessor->getHtmlInputNodeProcessor()->getDocument()->getElementsByTagName('a') as $element) {
+            /** @var \DOMElement $element */
+            $id = intval($element->getAttribute(HtmlNodeUnfurlLink::UNFURL_URL_ID_ATTRIBUTE_NAME));
+            
+            if (!empty($id)) {
+                $unfurlUrlIDs[] = $id;
+            }
+        }
+        
+        return $unfurlUrlIDs;
+    }
+}