You are here

class MediaController in Gutenberg 8

Same name and namespace in other branches
  1. 8.2 src/Controller/MediaController.php \Drupal\gutenberg\Controller\MediaController

Returns responses for our image routes.

Hierarchy

Expanded class hierarchy of MediaController

File

src/Controller/MediaController.php, line 21

Namespace

Drupal\gutenberg\Controller
View source
class MediaController extends ControllerBase {

  /**
   * The media service.
   *
   * @var \Drupal\gutenberg\Service\MediaService
   */
  protected $mediaService;

  /**
   * The media selection processor manager.
   *
   * @var \Drupal\gutenberg\MediaSelectionProcessor\MediaSelectionProcessorManagerInterface
   */
  protected $mediaSelectionProcessorManager;

  /**
   * MediaController constructor.
   *
   * @param \Drupal\gutenberg\Service\MediaService $media_service
   *   The media service.
   * @param \Drupal\gutenberg\MediaSelectionProcessor\MediaSelectionProcessorManagerInterface $media_selection_processor_manager
   *   The media selection processor manager.
   */
  public function __construct(MediaService $media_service, MediaSelectionProcessorManagerInterface $media_selection_processor_manager) {
    $this->mediaService = $media_service;
    $this->mediaSelectionProcessorManager = $media_selection_processor_manager;
  }

  /**
   * {@inheritDoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('gutenberg.media_service'), $container
      ->get('gutenberg.media_selection_processor_manager'));
  }

  /**
   * Render Drupal's media library dialog.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   Current request.
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   *
   * @throws \Exception
   */
  public function dialog(Request $request) {
    try {
      return new JsonResponse([
        'html' => $this->mediaService
          ->renderDialog(explode(',', $request
          ->get('types', []))),
      ]);
    } catch (MediaTypeNotFoundException $exception) {
      return new JsonResponse([
        'error' => $this
          ->t($exception
          ->getMessage()),
      ], 404);
    }
  }

  /**
   * Load media data.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   Current request.
   * @param string $media
   *   Media data (numeric or stringified JSON for media data processing).
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function loadMedia(Request $request, string $media) {
    $media_entities = $this->mediaSelectionProcessorManager
      ->processData($media);
    try {
      if (!$media_entities) {
        throw new MediaEntityNotFoundException();
      }
      return new JsonResponse($this->mediaService
        ->loadMediaData(reset($media_entities)));
    } catch (MediaEntityNotFoundException $exception) {
      return new JsonResponse($this
        ->t($exception
        ->getMessage()), 404);
    }
  }

  /**
   * Render provided media entity.
   *
   * @param string $media
   *   Media data (numeric or stringified JSON for media data processing).
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   */
  public function render(string $media) {
    $media_entities = $this->mediaSelectionProcessorManager
      ->processData($media);
    try {
      if (!$media_entities) {
        throw new MediaEntityNotFoundException();
      }
      $media_entity = reset($media_entities);
      return new JsonResponse([
        'view_modes' => $this->mediaService
          ->getRenderedMediaEntity($media_entity),
        'media_entity' => [
          'id' => $media_entity
            ->id(),
          'type' => $media_entity
            ->bundle(),
        ],
      ]);
    } catch (MediaEntityNotFoundException $exception) {
      return new JsonResponse([
        'error' => $this
          ->t($exception
          ->getMessage()),
      ], 404);
    }
  }

  /**
   * Upload files, save as file and media entity if possible.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   Current request.
   * @param \Drupal\editor\Entity\Editor|null $editor
   *   Editor entity instance.
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   *
   * @throws \Exception
   */
  public function upload(Request $request, ?Editor $editor) {
    $files = $request->files
      ->get('files', []);
    $uploaded_file = $files['fid'] ?? NULL;
    if (!$uploaded_file instanceof UploadedFile) {
      return new JsonResponse([
        'error' => $this
          ->t('Invalid file has been uploaded.'),
      ], 422);
    }
    try {
      return new JsonResponse($this->mediaService
        ->processMediaEntityUpload($uploaded_file, $editor));
    } catch (\Exception $exception) {
      return new JsonResponse([
        'error' => $this
          ->t($exception
          ->getMessage()),
      ], 500);
    }
  }

  /**
   * Get data of the media entity required for Gutenberg editor.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   Current request.
   * @param \Drupal\file\Entity\File|null $file
   *   Loaded found file entity instance.
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   *
   * @throws \Exception
   */
  public function load(Request $request, ?File $file) {
    if (!$file) {
      return new JsonResponse([
        'error' => $this
          ->t('File entity not found.'),
      ], 404);
    }
    try {
      return new JsonResponse($this->mediaService
        ->loadFileData($file));
    } catch (FileEntityNotFoundException $exception) {
      return new JsonResponse($this
        ->t($exception
        ->getMessage()), 404);
    }
  }

  /**
   * Searches for files.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   The request.
   * @param string $type
   *   The MIME type search string.
   * @param string $search
   *   The filename search string.
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   */
  public function search(Request $request, string $type = '', string $search = '') {
    return new JsonResponse($this->mediaService
      ->search($request, $type, $search));
  }

  /**
   * Updates file data.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   Current request.
   * @param string|int $fid
   *   File id.
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   *
   * @throws \Exception
   */
  public function updateData(Request $request, $fid) {
    $data = json_decode($request
      ->getContent(), TRUE);
    if (json_last_error() !== JSON_ERROR_NONE) {
      throw new \Exception("Request data couldn't be parsed.");
    }
    try {
      $this->mediaService
        ->updateMediaData($fid, $data);
    } catch (\Throwable $exception) {
      return new JsonResponse([
        'error' => $this
          ->t("Data couldn't be updated"),
      ], 500);
    }
    return new JsonResponse([
      'status' => 'ok',
    ]);
  }

  /**
   * Get data for autocomplete.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   Current request.
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   */
  public function autocomplete(Request $request) {
    return new JsonResponse($this->mediaService
      ->getMediaEntityAutoCompleteData($request
      ->get('search', '')));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MediaController::$mediaSelectionProcessorManager protected property The media selection processor manager.
MediaController::$mediaService protected property The media service.
MediaController::autocomplete public function Get data for autocomplete.
MediaController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
MediaController::dialog public function Render Drupal's media library dialog.
MediaController::load public function Get data of the media entity required for Gutenberg editor.
MediaController::loadMedia public function Load media data.
MediaController::render public function Render provided media entity.
MediaController::search public function Searches for files.
MediaController::updateData public function Updates file data.
MediaController::upload public function Upload files, save as file and media entity if possible.
MediaController::__construct public function MediaController constructor.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.