media_embed_view_mode_restrictions-1.x-dev/src/MediaLibraryEditorOpenerDecorator.php

src/MediaLibraryEditorOpenerDecorator.php
<?php

namespace Drupal\media_embed_view_mode_restrictions;

use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\editor\Ajax\EditorDialogSave;
use Drupal\media_library\MediaLibraryState;
use Drupal\media_library\MediaLibraryEditorOpener;
use Drupal\media_library\MediaLibraryOpenerInterface;

/**
 * Decorates MediaLibraryEditorOpener class provided by Media Library module.
 */
final class MediaLibraryEditorOpenerDecorator implements MediaLibraryOpenerInterface {

  /**
   * The decorated media library opener for text editors.
   *
   * @var \Drupal\media_library\MediaLibraryEditorOpener
   */
  protected $decorated;

  /**
   * The text format entity storage.
   *
   * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
   */
  protected $filterStorage;

  /**
   * The media storage.
   *
   * @var \Drupal\Core\Entity\ContentEntityStorageInterface
   */
  protected $mediaStorage;

  /**
   * The MediaLibraryEditorOpener constructor.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager) {
    $this->filterStorage = $entity_type_manager->getStorage('filter_format');
    $this->mediaStorage = $entity_type_manager->getStorage('media');
    $this->decorated = new MediaLibraryEditorOpener($entity_type_manager);
  }

  /**
   * {@inheritdoc}
   */
  public function checkAccess(MediaLibraryState $state, AccountInterface $account) {
    return $this->decorated->checkAccess($state, $account);
  }

  /**
   * {@inheritdoc}
   */
  public function getSelectionResponse(MediaLibraryState $state, array $selected_ids) {
    $selected_media = $this->mediaStorage->load(reset($selected_ids));

    $response = new AjaxResponse();
    $values = [
      'attributes' => [
        'data-entity-type' => 'media',
        'data-entity-uuid' => $selected_media->uuid(),
        'data-align' => 'center',
      ],
    ];

    // Set 'data-view-mode' attribute if a default view mode is configured
    // for the filter format.
    $media_library_opener_parameters = $state->get('media_library_opener_parameters');
    $filter_format = $this->filterStorage->load($media_library_opener_parameters['filter_format_id']);
    if ($filter_format && $filter_format->filters('media_embed')) {
      $filter = $filter_format->filters('media_embed');
      $bundle = $selected_media->bundle();

      // Check if bundle-specific default view mode is configured.
      if (isset($filter->settings['bundle_view_modes'][$bundle])) {
        $default_view_mode = $filter->settings['bundle_view_modes'][$bundle]['default_view_mode'];
      }
      else {
        $default_view_mode = $filter->settings['default_view_mode'];
      }

      if ($default_view_mode) {
        $values['attributes']['data-view-mode'] = $default_view_mode;
      }
    }

    $response->addCommand(new EditorDialogSave($values));

    return $response;
  }

}

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

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