You are here

oembed_providers.module in oEmbed Providers 2.x

Same filename and directory in other branches
  1. 1.0.x oembed_providers.module
  2. 1.1.x oembed_providers.module

This module allows site builders and developers to manage oEmbed providers.

File

oembed_providers.module
View source
<?php

/**
 * @file
 * This module allows site builders and developers to manage oEmbed providers.
 */
use Drupal\Core\Form\FormStateInterface;
use Drupal\oembed_providers\Traits\HelperTrait;

/**
 * Implements hook_media_source_info_alter().
 */
function oembed_providers_media_source_info_alter(array &$sources) {
  $buckets = \Drupal::service('entity_type.manager')
    ->getStorage('oembed_provider_bucket')
    ->loadMultiple();
  $provider_repository = \Drupal::service('media.oembed.provider_repository');
  $available_providers = [];
  foreach ($provider_repository
    ->getAll() as $provider) {
    $available_providers[] = $provider
      ->getName();
  }
  foreach ($buckets as $bucket) {
    $id = 'oembed:' . $bucket
      ->id();

    // Return providers that are 1) allowed per config and 2) exist as
    // an available provider.
    $providers = array_intersect($available_providers, $bucket
      ->get('providers'));
    $sources[$id] = [
      'id' => $bucket
        ->id(),
      'label' => $bucket
        ->label(),
      'description' => $bucket
        ->get('description'),
      'allowed_field_types' => [
        'string',
      ],
      'default_thumbnail_filename' => 'no-thumbnail.png',
      'providers' => $providers,
      'class' => 'Drupal\\media\\Plugin\\media\\Source\\OEmbed',
      'default_name_metadata_attribute' => 'default_name',
      'thumbnail_uri_metadata_attribute' => 'thumbnail_uri',
      'forms' => [
        'media_library_add' => 'Drupal\\media_library\\Form\\OEmbedForm',
      ],
    ];
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function oembed_providers_form_media_type_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  /** @var \Drupal\Core\Entity\EntityFormInterface */
  $callback_object = $form_state
    ->getBuildInfo()['callback_object'];

  /** @var \Drupal\media\MediaSourceInterface */
  $source = $callback_object
    ->getEntity()
    ->getSource();

  // Only render warning message for media types with oEmbed source.
  if ($source instanceof OEmbedInterface) {
    $warning = [
      '#markup' => HelperTrait::disabledProviderSecurityWarning(),
      // Simulate warning message.
      '#prefix' => '<div role="contentinfo" aria-label="Warning message" class="messages messages--warning">',
      '#suffix' => '</div>',
    ];
    array_unshift($form['source_dependent']['source_configuration'], $warning);
  }
}