private function SoEmbedFilter::embed in Simple oEmbed 8
Same name and namespace in other branches
- 8.2 src/Plugin/Filter/SoEmbedFilter.php \Drupal\soembed\Plugin\Filter\SoEmbedFilter::embed()
Callback function to process each URL
File
- src/
Plugin/ Filter/ SoEmbedFilter.php, line 53
Class
- SoEmbedFilter
- Plugin annotation @Filter( id = "filter_soembed", title = @Translation("Simple oEmbed filter"), description = @Translation("Embeds media for URL that supports oEmbed standard."), settings = { "soembed_maxwidth" = 500, …
Namespace
Drupal\soembed\Plugin\FilterCode
private function embed($match) {
static $providers = [];
if (empty($providers)) {
$providers_string = $this->settings['soembed_providers'];
$providers_line = explode("\n", $providers_string);
foreach ($providers_line as $value) {
$items = explode(" | ", $value);
$key = array_shift($items);
$providers[$key] = $items;
}
}
$url = $match[2];
foreach ($providers as $matchmask => $data) {
list($providerurl, $regex) = $data;
$regex = preg_replace('/\\s+/', '', $regex);
if ($regex == 'false') {
$regex = false;
}
if (!$regex) {
$matchmask = '#' . str_replace('___wildcard___', '(.+)', preg_quote(str_replace('*', '___wildcard___', $matchmask), '#')) . '#i';
}
if (preg_match($matchmask, $url)) {
$provider = $providerurl;
break;
}
}
if (!empty($provider)) {
if ($regex === 'LOCAL') {
$output = $this
->getContents($provider, $url);
}
else {
$client = \Drupal::httpClient();
$response = '';
try {
$request = $client
->get($provider . '?url=' . $url . '&format=json&maxwidth=' . $this->settings['soembed_maxwidth']);
$response = $request
->getBody();
} catch (\Exception $e) {
watchdog_exception('soembed', $e);
}
if (!empty($response)) {
$embed = json_decode($response);
if (!empty($embed->html)) {
$output = $embed->html;
}
elseif ($embed->type == 'photo') {
$output = '<img src="' . $embed->url . '" title="' . $embed->title . '" style="width: 100%" />';
$output = '<a href="' . $url . '">' . $output . '</a>';
}
}
}
}
$output = empty($output) ? $url : $output;
if (count($match) > 3) {
$output = $match[1] . $output . $match[3];
// Add <p> and </p> back.
}
return $output;
}