acquia_dam-1.0.0-rc1/src/AcquiaDamMediaLibraryFieldWidgetOpener.php
src/AcquiaDamMediaLibraryFieldWidgetOpener.php
<?php
namespace Drupal\acquia_dam;
use Drupal\Core\Ajax\InvokeCommand;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\FieldConfigInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\media\Entity\Media;
use Drupal\media_library\MediaLibraryFieldWidgetOpener;
use Drupal\media_library\MediaLibraryOpenerInterface;
use Drupal\media_library\MediaLibraryState;
/**
* Decorates the media library editor opener with our customizations.
*/
class AcquiaDamMediaLibraryFieldWidgetOpener implements MediaLibraryOpenerInterface {
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The decorated MediaLibraryFieldOpener.
*
* @var \Drupal\media_library\MediaLibraryFieldWidgetOpener
*/
protected $inner;
/**
* MediaLibraryFieldWidgetOpener constructor.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\media_library\MediaLibraryFieldWidgetOpener $inner
* The decorated function.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, MediaLibraryFieldWidgetOpener $inner) {
$this->entityTypeManager = $entity_type_manager;
$this->inner = $inner;
}
/**
* {@inheritDoc}
*/
public function getSelectionResponse(MediaLibraryState $state, array $selected_ids) {
$response = $this->inner->getSelectionResponse($state, $selected_ids);
$parameters = $state->getOpenerParameters();
$widget_id = $parameters['field_widget_id'];
$config = FieldConfig::loadByName($parameters['entity_type_id'], $parameters['bundle'], $parameters['field_name']);
assert($config instanceof FieldConfigInterface);
// If the field has revision add them as well.
if ($config->getType() === 'entity_reference_revisions') {
$selected_media_ids = Media::loadMultiple($selected_ids);
$selected_rids = [];
foreach ($selected_media_ids as $media) {
$selected_rids[] = $media->getRevisionId();
}
$widget_revision_id = $widget_id . '_revisions';
$response
->addCommand(new InvokeCommand("[data-media-library-widget-value=\"$widget_revision_id\"]", 'val', [implode(',', $selected_rids)]), TRUE);
}
return $response;
}
/**
* {@inheritDoc}
*/
public function checkAccess(MediaLibraryState $state, AccountInterface $account) {
return $this->inner->checkAccess($state, $account);
}
}
