From 85c40b9e98a9e13c149e45cc200f9fd05cadfe06 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 20 Sep 2019 11:56:42 -0300 Subject: [PATCH 1/6] Syntax --- src/EventSubscriber/MediaLinkHeaderSubscriber.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/EventSubscriber/MediaLinkHeaderSubscriber.php b/src/EventSubscriber/MediaLinkHeaderSubscriber.php index 16e286e2..18fe60eb 100644 --- a/src/EventSubscriber/MediaLinkHeaderSubscriber.php +++ b/src/EventSubscriber/MediaLinkHeaderSubscriber.php @@ -71,7 +71,8 @@ class MediaLinkHeaderSubscriber extends LinkHeaderSubscriber implements EventSub $source_field = $type_configuration['source_field']; if (empty($source_field) || - !$media->hasField($source_field) + !$media->hasField($source_field) || + !method_exists($media->get($source_field), 'referencedEntities') ) { return $links; } From 852e52340a244bb032fbf61384c3a5d2e43a3b4c Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 20 Sep 2019 12:00:57 -0300 Subject: [PATCH 2/6] Formatting --- src/EventSubscriber/MediaLinkHeaderSubscriber.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EventSubscriber/MediaLinkHeaderSubscriber.php b/src/EventSubscriber/MediaLinkHeaderSubscriber.php index 18fe60eb..2c4a6fe3 100644 --- a/src/EventSubscriber/MediaLinkHeaderSubscriber.php +++ b/src/EventSubscriber/MediaLinkHeaderSubscriber.php @@ -72,7 +72,7 @@ class MediaLinkHeaderSubscriber extends LinkHeaderSubscriber implements EventSub if (empty($source_field) || !$media->hasField($source_field) || - !method_exists($media->get($source_field), 'referencedEntities') + !method_exists($media->get($source_field), 'referencedEntities') ) { return $links; } From 47a9a999bcfc419f9bcebc2b01f13f83a1031ab9 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Tue, 1 Oct 2019 09:06:47 -0300 Subject: [PATCH 3/6] Added role filter --- src/Controller/ManageMediaController.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Controller/ManageMediaController.php b/src/Controller/ManageMediaController.php index 776a6808..e0ef7a69 100644 --- a/src/Controller/ManageMediaController.php +++ b/src/Controller/ManageMediaController.php @@ -22,7 +22,9 @@ class ManageMediaController extends ManageMembersController { * Array of media types to add. */ public function addToNodePage(NodeInterface $node) { - return $this->generateTypeList( + $current_user = \Drupal::currentUser(); + $roles = $current_user->getRoles(); + $list = $this->generateTypeList( 'media', 'media_type', 'entity.media.add_form', @@ -30,6 +32,17 @@ class ManageMediaController extends ManageMembersController { $node, 'field_media_of' ); + if (!in_array('fedoraadmin', $roles)) { + $bundles = $list['#bundles']; + foreach ($bundles as $label => $bundle) { + $storage = $this->entityFieldManager->getFieldStorageDefinitions('media', $label); + $scheme = $storage['field_media_file']->getSetting('uri_scheme'); + if ($scheme == 'fedora') { + unset($list['#bundles'][$label]); + } + } + } + return $list; } /** From 5b8d9dbb802f9ac3d13ce901e4c0c9817ee2ad22 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Tue, 1 Oct 2019 13:15:28 -0300 Subject: [PATCH 4/6] made user a class property --- src/Controller/ManageMediaController.php | 3 +-- src/Controller/ManageMembersController.php | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Controller/ManageMediaController.php b/src/Controller/ManageMediaController.php index e0ef7a69..f8d2fe4f 100644 --- a/src/Controller/ManageMediaController.php +++ b/src/Controller/ManageMediaController.php @@ -22,8 +22,7 @@ class ManageMediaController extends ManageMembersController { * Array of media types to add. */ public function addToNodePage(NodeInterface $node) { - $current_user = \Drupal::currentUser(); - $roles = $current_user->getRoles(); + $roles = $this->currentUser->getRoles(); $list = $this->generateTypeList( 'media', 'media_type', 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') ); } From 7015821c717e4d6e622cbe29431dc28bffdc9dd0 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 3 Oct 2019 15:56:35 -0300 Subject: [PATCH 5/6] Checked individual field types. --- src/Controller/ManageMediaController.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Controller/ManageMediaController.php b/src/Controller/ManageMediaController.php index f8d2fe4f..e6895719 100644 --- a/src/Controller/ManageMediaController.php +++ b/src/Controller/ManageMediaController.php @@ -22,6 +22,8 @@ class ManageMediaController extends ManageMembersController { * Array of media types to add. */ public function addToNodePage(NodeInterface $node) { + // The role fedoraAdmin is currently hardcoded and + // must be in the user's profile for successful writes to Fedora. $roles = $this->currentUser->getRoles(); $list = $this->generateTypeList( 'media', @@ -34,10 +36,15 @@ class ManageMediaController extends ManageMembersController { if (!in_array('fedoraadmin', $roles)) { $bundles = $list['#bundles']; foreach ($bundles as $label => $bundle) { - $storage = $this->entityFieldManager->getFieldStorageDefinitions('media', $label); - $scheme = $storage['field_media_file']->getSetting('uri_scheme'); - if ($scheme == 'fedora') { - unset($list['#bundles'][$label]); + $fields = $this->entityFieldManager->getFieldDefinitions('media', $label); + foreach ($fields as $field) { + $file_type = $field->getType(); + if ($file_type == 'file') { + $scheme = $field->getSetting('uri_scheme'); + if ($scheme == 'fedora') { + unset($list['#bundles'][$label]); + } + } } } } From e6f13bd56e9d6264d1f1bd1736b1eef570e0db01 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 4 Oct 2019 08:53:57 -0300 Subject: [PATCH 6/6] Added additional field type --- src/Controller/ManageMediaController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Controller/ManageMediaController.php b/src/Controller/ManageMediaController.php index e6895719..af33b51c 100644 --- a/src/Controller/ManageMediaController.php +++ b/src/Controller/ManageMediaController.php @@ -25,6 +25,7 @@ class ManageMediaController extends ManageMembersController { // 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', @@ -39,7 +40,7 @@ class ManageMediaController extends ManageMembersController { $fields = $this->entityFieldManager->getFieldDefinitions('media', $label); foreach ($fields as $field) { $file_type = $field->getType(); - if ($file_type == 'file') { + if (in_array($file_type, $checked_fields)) { $scheme = $field->getSetting('uri_scheme'); if ($scheme == 'fedora') { unset($list['#bundles'][$label]);