private function OEmbedFilter::embed in Gutenberg 8
Callback function to process each URL.
File
- src/
Plugin/ Filter/ OEmbedFilter.php, line 53
Class
- OEmbedFilter
- Class OEmbedFilter.
Namespace
Drupal\gutenberg\Plugin\FilterCode
private function embed($match) {
static $providers = [];
if (empty($providers)) {
$providers_string = $this->settings['oembed_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 ($regex === 'LOCAL' && !empty($provider)) {
$output = $this
->getContents($provider, $url);
}
elseif (!empty($provider)) {
$client = \Drupal::httpClient();
$response = '';
try {
$request = $client
->get($provider . '?url=' . $url . '&origin=drupal&format=json&maxwidth=' . $this->settings['oembed_maxwidth']);
$response = $request
->getBody();
} catch (RequestException $e) {
watchdog_exception('oembed', $e);
} catch (\Throwable $e) {
watchdog_exception('oembed', $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>';
}
}
}
else {
$client = \Drupal::httpClient();
$response = '';
try {
$request = $client
->get(OEMBED_DEFAULT_PROVIDER . '?origin=drupal&url=' . $url);
$response = $request
->getBody();
} catch (RequestException $e) {
watchdog_exception('oembed', $e);
} catch (\Throwable $e) {
watchdog_exception('oembed', $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) {
// Add <figure> and </figure> back.
$output = $match[1] . $output . $match[3];
}
return $output;
}