cloudinary-8.x-1.x-dev/modules/cloudinary_media_library_widget/src/Plugin/Field/FieldWidget/CloudinaryWidget.php

modules/cloudinary_media_library_widget/src/Plugin/Field/FieldWidget/CloudinaryWidget.php
<?php

namespace Drupal\cloudinary_media_library_widget\Plugin\Field\FieldWidget;

use Cloudinary\Asset\AssetType;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Plugin implementation of the 'cloudinary_widget' field widget.
 *
 * @FieldWidget(
 *   id = "cloudinary_widget",
 *   label = @Translation("Cloudinary widget"),
 *   description = @Translation("Allows you to choose cloudinary assets from the cloudinary library."),
 *   field_types = {
 *     "cloudinary_image",
 *     "cloudinary_video",
 *     "cloudinary_raw",
 *   },
 *   multiple_values = TRUE,
 * )
 */
class CloudinaryWidget extends WidgetBase {

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return [
      'show_preview' => TRUE,
    ] + parent::defaultSettings();
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $element = parent::settingsForm($form, $form_state);
    $element['show_preview'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Show preview'),
      '#description' => $this->t('Whether to show the preview image once you inserted an asset from cloudinary library.'),
      '#default_value' => $this->getSetting('show_preview'),
    ];

    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public function settingsSummary() {
    $summary = parent::settingsSummary();

    if (!$this->getSetting('show_preview')) {
      $summary[] = $this->t('No preview');
    }
    else {
      $summary[] = $this->t('Preview is enabled');
    }

    return $summary;
  }

  /**
   * {@inheritdoc}
   */
  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
    /** @var \Drupal\media\MediaTypeInterface $media_type */
    $media_type = $items->getEntity()->get('bundle')->entity;
    $configuration = $media_type->getSource()->getConfiguration();
    $resource_type = $configuration['resource_type'];
    $cardinality = $this->fieldDefinition->getFieldStorageDefinition()->getCardinality();

    $element += [
      '#type' => 'cloudinary_media_library',
      '#field_name' => $items->getFieldDefinition()->getName(),
      '#weight' => $delta,
      '#extended' => TRUE,
      '#extended_element_type' => 'textfield',
      '#resource_type' => $resource_type,
      '#preview' => $this->getSetting('show_preview'),
      '#default_value' => $items->getValue(),
      '#multiple' => $cardinality > 1 || $cardinality === FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
      '#cardinality' => $cardinality,
    ];

    if (!$element['#multiple'] && $element['#default_value']) {
      $element['#default_value'] = reset($element['#default_value']);
    }

    // Add properties needed by process() method.
    if ($resource_type === AssetType::IMAGE) {
      $field_settings = $this->getFieldSettings();
      $element['#alt_field'] = $field_settings['alt_field'];
      $element['#alt_field_required'] = $field_settings['alt_field_required'];
      $element['#title_field'] = $field_settings['title_field'];
      $element['#title_field_required'] = $field_settings['title_field_required'];
    }

    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
    $values = parent::massageFormValues($values, $form, $form_state);

    if (isset($values['value'])) {
      unset($values['value']);
    }

    if (isset($values['type'])) {
      unset($values['type']);
    }

    if (isset($values['_original_delta'])) {
      unset($values['_original_delta']);
    }

    // Return single value.
    if (isset($values['public_id'])) {
      return $values;
    }

    foreach ($values as $delta => $value) {
      unset($value['type']);
      unset($value['_original_delta']);
      unset($value['value']);

      $values[$delta] = $value;
    }

    return $values;
  }

  /**
   * {@inheritdoc}
   */
  public static function isApplicable(FieldDefinitionInterface $field_definition) {
    // The field widget is only applicable with cloudinary source media.
    if ($field_definition->getTargetEntityTypeId() === 'media') {
      /** @var \Drupal\media\MediaTypeInterface $media_type */
      $media_type = \Drupal::entityTypeManager()->getStorage('media_type')
        ->load($field_definition->getTargetBundle());

      return $media_type->getSource()->getPluginId() === 'cloudinary';
    }

    return FALSE;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc