Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / media / src / Plugin / Field / FieldWidget / OEmbedWidget.php
diff --git a/web/core/modules/media/src/Plugin/Field/FieldWidget/OEmbedWidget.php b/web/core/modules/media/src/Plugin/Field/FieldWidget/OEmbedWidget.php
new file mode 100644 (file)
index 0000000..1252265
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+namespace Drupal\media\Plugin\Field\FieldWidget;
+
+use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Field\Plugin\Field\FieldWidget\StringTextfieldWidget;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\media\Entity\MediaType;
+use Drupal\media\Plugin\media\Source\OEmbedInterface;
+
+/**
+ * Plugin implementation of the 'oembed_textfield' widget.
+ *
+ * @internal
+ *   This is an internal part of the oEmbed system and should only be used by
+ *   oEmbed-related code in Drupal core.
+ *
+ * @FieldWidget(
+ *   id = "oembed_textfield",
+ *   label = @Translation("oEmbed URL"),
+ *   field_types = {
+ *     "string",
+ *   },
+ * )
+ */
+class OEmbedWidget extends StringTextfieldWidget {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
+    $element = parent::formElement($items, $delta, $element, $form, $form_state);
+
+    /** @var \Drupal\media\Plugin\media\Source\OEmbedInterface $source */
+    $source = $items->getEntity()->getSource();
+    $message = $this->t('You can link to media from the following services: @providers', ['@providers' => implode(', ', $source->getProviders())]);
+
+    if (!empty($element['#value']['#description'])) {
+      $element['value']['#description'] = [
+        '#theme' => 'item_list',
+        '#items' => [$element['value']['#description'], $message],
+      ];
+    }
+    else {
+      $element['value']['#description'] = $message;
+    }
+
+    return $element;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function isApplicable(FieldDefinitionInterface $field_definition) {
+    $target_bundle = $field_definition->getTargetBundle();
+
+    if (!parent::isApplicable($field_definition) || $field_definition->getTargetEntityTypeId() !== 'media' || !$target_bundle) {
+      return FALSE;
+    }
+    return MediaType::load($target_bundle)->getSource() instanceof OEmbedInterface;
+  }
+
+}