Skip to content

Media Provider Package Installation Plugin#

Media providers are responsible to detect and convert links to a 3rd party service inside messages.

Components#

Each item is described as a <provider> element with the mandatory attribute name that should equal the lower-cased provider name. If a provider provides multiple components that are (largely) unrelated to each other, it is recommended to use a dash to separate the name and the component, e. g. youtube-playlist.

<title>#

The title is displayed in the administration control panel and is only used there, the value is neither localizable nor is it ever exposed to regular users.

<regex>#

The regular expression used to identify links to this provider, it must not contain anchors or delimiters. It is strongly recommended to capture the primary object id using the (?P<ID>...) group.

<className>#

<className> and <html> are mutually exclusive.

PHP-Callback-Class that is invoked to process the matched link in case that additional logic must be applied that cannot be handled through a simple replacement as defined by the <html> element.

The callback-class must implement the interface \wcf\system\bbcode\media\provider\IBBCodeMediaProvider.

<html>#

<className> and <html> are mutually exclusive.

Replacement HTML that gets populated using the captured matches in <regex>, variables are accessed as {$VariableName}. For example, the capture group (?P<ID>...) is accessed using {$ID}.

Example#

mediaProvider.xml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/2019/mediaProvider.xsd">
    <import>
        <provider name="youtube">
            <title>YouTube</title>
            <regex><![CDATA[https?://(?:.+?\.)?youtu(?:\.be/|be\.com/(?:#/)?watch\?(?:.*?&)?v=)(?P<ID>[a-zA-Z0-9_-]+)(?:(?:\?|&)t=(?P<start>[0-9hms]+)$)?]]></regex>
            <!-- advanced PHP callback -->
            <className><![CDATA[wcf\system\bbcode\media\provider\YouTubeBBCodeMediaProvider]]></className>
        </provider>

        <provider name="youtube-playlist">
            <title>YouTube Playlist</title>
            <regex><![CDATA[https?://(?:.+?\.)?youtu(?:\.be/|be\.com/)playlist\?(?:.*?&)?list=(?P<ID>[a-zA-Z0-9_-]+)]]></regex>
            <!-- uses a simple HTML replacement -->
            <html><![CDATA[<div class="videoContainer"><iframe src="https://www.youtube.com/embed/videoseries?list={$ID}" allowfullscreen></iframe></div>]]></html>
        </provider>
    </import>

    <delete>
        <provider name="example" />
    </delete>
</data>

Last update: 2021-10-20