govcms8-8.x-1.0-alpha7/modules/custom/core/govcms_media/govcms_media.module

modules/custom/core/govcms_media/govcms_media.module
<?php

/**
 * @file
 * Support for media assets in GovCMS.
 */

use Drupal\govcms_media\OverrideHelper as Override;
use Drupal\govcms_media\Plugin\media\Source\File;
use Drupal\govcms_media\Plugin\media\Source\Image;
use Drupal\govcms_media\Plugin\media\Source\AudioFile;
use Drupal\govcms_media\Plugin\media\Source\VideoFile;
use Drupal\govcms_media\Plugin\media\Source\RemoteVideo;
use Drupal\govcms_media\Form\MediaForm;
use Drupal\image\Plugin\Field\FieldType\ImageItem;
use Drupal\govcms_media\MediaHelper;
use Drupal\govcms_media\Exception\IndeterminateBundleException;
use Drupal\file\FileInterface;

/**
 * Implements hook_media_source_info_alter().
 *
 * Code from hook_media_source_info_alter in lightning_media 8.x-2.3 submodule.
 */
function govcms_media_media_source_info_alter(array &$sources) {
  $sources['file']['input_match']['field_types'] = ['file'];
  Override::pluginClass($sources['file'], File::class);

  $sources['image']['input_match']['field_types'] = ['image'];
  Override::pluginClass($sources['image'], Image::class);

  $sources['audio_file']['input_match']['field_types'] = ['audio_file'];
  Override::pluginClass($sources['audio_file'], AudioFile::class);

  $sources['video_file']['input_match']['field_types'] = ['video_file'];
  Override::pluginClass($sources['video_file'], VideoFile::class);

  $sources['video_embed_field']['input_match'] = [
    'field_types' => [
      'string',
      'string_long',
      'video_embed_field',
    ],
  ];
  $sources['video_embed_field']['preview'] = TRUE;

  Override::pluginClass($sources['video_embed_field'], RemoteVideo::class);
}

/**
 * Implements hook_entity_type_alter().
 *
 * Code from lightning_media_entity_type_alter() in lightning_media 8.x-2.3
 * submodule.
 */
function govcms_media_entity_type_alter(array &$entity_types) {
  if (\Drupal::moduleHandler()->moduleExists('media')) {

    // Use our specialized entity form for adding and editing media assets in
    // order to support dynamic preview generation.
    Override::entityForm($entity_types['media'], MediaForm::class);
    Override::entityForm($entity_types['media'], MediaForm::class, 'edit');

  }
}

/**
 * Validates a file using media entity source field criteria.
 *
 * Code from lightning_media_validate_upload() in lightning_media 8.x-2.3
 * submodule.
 *
 * @param \Drupal\file\FileInterface $file
 *   The file to validate.
 * @param string[] $bundles
 *   (optional) A set of media bundle IDs which might match the input. If
 *   omitted, all bundles to which the user has create access will be checked.
 *
 * @return string[]
 *   An array of errors. If empty, the file passed validation.
 */
function govcms_media_validate_upload(FileInterface $file, array $bundles = []) {
  try {
    $entity = \Drupal::service('govcms_media.media_helper')->createFromInput($file, $bundles);
  }
  catch (IndeterminateBundleException $e) {
    return [];
  }

  /** @var \Drupal\file\Plugin\Field\FieldType\FileItem $item */
  $item = MediaHelper::getSourceField($entity)->first();

  $validators = [
    // It's maybe a bit overzealous to run this validator, but hey...better
    // safe than screwed over by script kiddies.
    'file_validate_name_length' => [],
  ];
  $validators = array_merge($validators, $item->getUploadValidators());
  // This function is only called by the custom FileUpload widget, which runs
  // file_validate_extensions before this function. So there's no need to
  // validate the extensions again.
  unset($validators['file_validate_extensions']);

  // If this is an image field, add image validation. Against all sanity,
  // this is normally done by ImageWidget, not ImageItem, which is why we
  // need to facilitate this a bit.
  if ($item instanceof ImageItem) {
    // Validate that this is, indeed, a supported image.
    $validators['file_validate_is_image'] = [];

    $settings = $item->getFieldDefinition()->getSettings();
    if ($settings['max_resolution'] || $settings['min_resolution']) {
      $validators['file_validate_image_resolution'] = [
        $settings['max_resolution'],
        $settings['min_resolution'],
      ];
    }
  }
  return file_validate($file, $validators);
}

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

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