httpClient = $http_client; $this->iiifInfo = $iiif_info; $this->utils = $islandora_utils; $this->mediaSource = $media_source; $this->logger = $channel; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('entity_type.manager'), $container->get('datetime.time'), $container->get('http_client'), $container->get('islandora_iiif'), $container->get('islandora.utils'), $container->get('islandora.media_source_service'), $container->get('logger.channel.islandora') ); } /** * {@inheritdoc} */ public function execute($entity = NULL) { $width = $height = FALSE; // Get the original File media use term. $original_file_term = $this->utils->getTermForUri('http://pcdm.org/use#OriginalFile'); /** * @var \Drupal\media\MediaInterface $original_file_media */ $original_file_mids = $this->utils->getMediaReferencingNodeAndTerm($entity, $original_file_term); if (!empty($original_file_mids)) { // Ordinarily there shouldn't be more than one Original File media but // it's not guaranteed. foreach ($original_file_mids as $original_file_mid) { /** * @var \Drupal\Media\MediaInterface $original_file_media */ $original_file_media = $this->entityTypeManager->getStorage('media')->load($original_file_mid); // Get the media MIME Type. $original_file = $this->mediaSource->getSourceFile($original_file_media); $mime_type = $original_file->getMimeType(); if (in_array($mime_type, ['image/tiff', 'image/jp2'])) { [$width, $height] = $this->iiifInfo->getImageDimensions($original_file); } // @todo Make field configurable. Low priority since this whole thing is a workaround for an Islandora limitation. if ($original_file_media->hasField('field_width') && $original_file_media->hasField('field_height')) { $original_file_media->set('field_height', $height); $original_file_media->set('field_width', $width); $original_file_media->save(); } } } } /** * {@inheritdoc} */ public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) { /** @var \Drupal\Core\Entity\EntityInterface $object */ return $object->access('update', $account, $return_as_object); } }