You are here

private function SoEmbedFilter::embed in Simple oEmbed 8

Same name and namespace in other branches
  1. 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\Filter

Code

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;
}