diff --git a/core/modules/media_entity/src/Plugin/Type/Document.php b/core/modules/media_entity/src/Plugin/Type/Document.php new file mode 100644 index 0000000..68376a3 --- /dev/null +++ b/core/modules/media_entity/src/Plugin/Type/Document.php @@ -0,0 +1,123 @@ + $this->t('File MIME'), + 'size' => $this->t('Size'), + ]; + } + + /** + * {@inheritdoc} + */ + public function getField(MediaInterface $media, $name) { + $source_field = $this->configuration['source_field']; + + // Get the file document. + /** @var \Drupal\file\FileInterface $file */ + $file = $media->{$source_field}->entity; + + // Return the field. + switch ($name) { + case 'mime': + return !$file->filemime->isEmpty() ? $file->getMimeType() : FALSE; + + case 'size': + $size = $file->getSize(); + return $size ? $size : FALSE; + } + + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function buildConfigurationForm(array $form, FormStateInterface $form_state) { + /** @var \Drupal\media_entity\MediaBundleInterface $bundle */ + $bundle = $form_state->getFormObject()->getEntity(); + $options = []; + $allowed_field_types = ['file']; + + /** @var \Drupal\Core\Field\FieldDefinitionInterface $field */ + foreach ($this->entityFieldManager->getFieldDefinitions('media', $bundle->id()) as $field_name => $field) { + if (in_array($field->getType(), $allowed_field_types) && !$field->getFieldStorageDefinition()->isBaseField()) { + $options[$field_name] = $field->getLabel(); + } + } + + $form['source_field'] = [ + '#type' => 'select', + '#title' => $this->t('Field with source information'), + '#description' => $this->t('Field on media entity that stores Document file. You can create a bundle without selecting a value for this dropdown initially. This dropdown can be populated after adding fields to the bundle.'), + '#default_value' => empty($this->configuration['source_field']) ? NULL : $this->configuration['source_field'], + '#options' => $options, + ]; + + return $form; + } + + /** + * {@inheritdoc} + */ + public function thumbnail(MediaInterface $media) { + $source_field = $this->configuration['source_field']; + /** @var \Drupal\file\FileInterface $file */ + $file = $media->{$source_field}->entity; + + if ($file) { + $mimetype = $file->getMimeType(); + $mimetype = explode('/', $mimetype); + $thumbnail = $this->configFactory->get('media_entity.settings')->get('icon_base') . "/{$mimetype[0]}-{$mimetype[1]}.png"; + + if (!is_file($thumbnail)) { + $thumbnail = $this->configFactory->get('media_entity.settings')->get('icon_base') . "/{$mimetype[1]}.png"; + + if (!is_file($thumbnail)) { + $thumbnail = $this->configFactory->get('media_entity.settings')->get('icon_base') . '/document.png'; + } + } + } + else { + $thumbnail = $this->configFactory->get('media_entity.settings')->get('icon_base') . '/document.png'; + } + + return $thumbnail; + } + + /** + * {@inheritdoc} + */ + public function getDefaultName(MediaInterface $media) { + // The default name will be the filename of the source_field, if present. + $source_field = $this->configuration['source_field']; + + /** @var \Drupal\file\FileInterface $file */ + if (!empty($source_field) && ($file = $media->{$source_field}->entity)) { + return $file->getFilename(); + } + + return parent::getDefaultName($media); + } + +}