You are here

ExtensionMimeTypeGuesser.php in FileField Sources 8

File

src/File/MimeType/ExtensionMimeTypeGuesser.php
View source
<?php

namespace Drupal\filefield_sources\File\MimeType;

use Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser as CoreExtensionMimeTypeGuesser;

/**
 * Add methods to core guesser.
 */
class ExtensionMimeTypeGuesser extends CoreExtensionMimeTypeGuesser {

  /**
   * Convert mime type to extension.
   *
   * @param string $mimetype
   *   Mime type.
   *
   * @return string|bool
   *   Return extension if found, FALSE otherwise.
   */
  public function convertMimeTypeToExtension($mimetype) {
    $this
      ->checkDefaultMapping();
    $mime_key = array_search($mimetype, $this->mapping['mimetypes']);
    $extension = array_search($mime_key, $this->mapping['extensions']);
    return $extension;
  }

  /**
   * Convert mime type to most common extension.
   *
   * @param string $mimetype
   *   Mime type.
   *
   * @return string|bool
   *   Return extension if found, FALSE otherwise.
   */
  public function convertMimeTypeToMostCommonExtension($mimetype) {
    $this
      ->checkDefaultMapping();
    $extension = FALSE;
    if (isset($mimetype)) {

      // See if this matches a known MIME type.
      $mime_key = array_search($mimetype, $this->mapping['mimetypes']);
      if ($mime_key !== FALSE) {

        // If we have a match, get this list of likely extensions. For some
        // reason Drupal lists the "most common" extension last for most file
        // types including php, jpg, and doc.
        if ($extensions = array_keys($this->mapping['extensions'], $mime_key)) {
          $extension = end($extensions);
        }
      }
    }
    return $extension;
  }

  /**
   * Check for default mapping.
   */
  private function checkDefaultMapping() {
    if ($this->mapping === NULL) {
      $mapping = $this->defaultMapping;

      // Allow modules to alter the default mapping.
      $this->moduleHandler
        ->alter('file_mimetype_mapping', $mapping);
      $this->mapping = $mapping;
    }
  }

}

Classes

Namesort descending Description
ExtensionMimeTypeGuesser Add methods to core guesser.