diff --git a/src/Controller/ManageMediaController.php b/src/Controller/ManageMediaController.php index 776a6808..af33b51c 100644 --- a/src/Controller/ManageMediaController.php +++ b/src/Controller/ManageMediaController.php @@ -22,7 +22,11 @@ class ManageMediaController extends ManageMembersController { * Array of media types to add. */ public function addToNodePage(NodeInterface $node) { - return $this->generateTypeList( + // The role fedoraAdmin is currently hardcoded and + // must be in the user's profile for successful writes to Fedora. + $roles = $this->currentUser->getRoles(); + $checked_fields = ['file', 'image']; + $list = $this->generateTypeList( 'media', 'media_type', 'entity.media.add_form', @@ -30,6 +34,22 @@ class ManageMediaController extends ManageMembersController { $node, 'field_media_of' ); + if (!in_array('fedoraadmin', $roles)) { + $bundles = $list['#bundles']; + foreach ($bundles as $label => $bundle) { + $fields = $this->entityFieldManager->getFieldDefinitions('media', $label); + foreach ($fields as $field) { + $file_type = $field->getType(); + if (in_array($file_type, $checked_fields)) { + $scheme = $field->getSetting('uri_scheme'); + if ($scheme == 'fedora') { + unset($list['#bundles'][$label]); + } + } + } + } + } + return $list; } /** diff --git a/src/Controller/ManageMembersController.php b/src/Controller/ManageMembersController.php index 7f54706c..c9b8fb3b 100644 --- a/src/Controller/ManageMembersController.php +++ b/src/Controller/ManageMembersController.php @@ -7,6 +7,7 @@ use Drupal\Core\Render\RendererInterface; use Drupal\Core\Entity\Controller\EntityController; use Drupal\Core\Entity\EntityFieldManager; use Drupal\Core\Link; +use Drupal\Core\Session\AccountProxyInterface; use Drupal\node\NodeInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -35,6 +36,12 @@ class ManageMembersController extends EntityController { * @var \Drupal\Core\Render\RendererInterface */ protected $renderer; + /** + * The current user. + * + * @var \Drupal\Core\Session\AccountProxyInterface + */ + protected $currentUser; /** * Constructor. @@ -45,15 +52,20 @@ class ManageMembersController extends EntityController { * The entity field manager. * @param \Drupal\Core\Render\RendererInterface $renderer * The renderer. + * @param \Drupal\Core\Session\AccountProxyInterface $currentUser + * The current user. */ public function __construct( EntityTypeManagerInterface $entity_type_manager, EntityFieldManager $entity_field_manager, - RendererInterface $renderer + RendererInterface $renderer, + AccountProxyInterface $currentUser ) { $this->entityTypeManager = $entity_type_manager; $this->entityFieldManager = $entity_field_manager; $this->renderer = $renderer; + $this->currentUser = $currentUser; + } /** @@ -63,7 +75,8 @@ class ManageMembersController extends EntityController { return new static( $container->get('entity_type.manager'), $container->get('entity_field.manager'), - $container->get('renderer') + $container->get('renderer'), + $container->get('current_user') ); }