diff --git a/composer.json b/composer.json index 5fb9e078d7..9e481ecddb 100644 --- a/composer.json +++ b/composer.json @@ -104,6 +104,8 @@ "drupal/pathauto": "1.13.0", "drupal/quick_node_clone": "1.17.0", "drupal/redirect": "1.11.0", + "drupal/remote_stream_wrapper": "2.1.0", + "drupal/remote_stream_wrapper_widget": "1.4.0", "drupal/role_delegation": "1.3.0", "drupal/schema_metatag": "3.0.3", "drupal/search_exclude": "3.0.0-beta1", @@ -195,6 +197,9 @@ "drupal/role_delegation": { "Restrict access to cancel/remove accounts with non-assignable roles (3299201)": "https://www.drupal.org/files/issues/2022-07-25/3299201-4.patch" }, + "drupal/remote_stream_wrapper": { + "Image styles setting extension cause access denied (3068898)": "https://www.drupal.org/files/issues/2024-12-02/3068898-12.patch" + }, "drupal/search_exclude": { "Request for a Views Handler (2882683)": "https://www.drupal.org/files/issues/2023-06-29/request_for_a_views-2882683-14_0.patch" }, diff --git a/modules/custom/az_person/az_person_profiles_import/az_person_profiles_import.info.yml b/modules/custom/az_person/az_person_profiles_import/az_person_profiles_import.info.yml index 9eaf441bcf..634427cfa2 100644 --- a/modules/custom/az_person/az_person_profiles_import/az_person_profiles_import.info.yml +++ b/modules/custom/az_person/az_person_profiles_import/az_person_profiles_import.info.yml @@ -12,3 +12,4 @@ dependencies: - node - path - pathauto + - remote_stream_wrapper \ No newline at end of file diff --git a/modules/custom/az_person/az_person_profiles_import/migrations/az_person_profiles_import.yml b/modules/custom/az_person/az_person_profiles_import/migrations/az_person_profiles_import.yml index c9ac67b27c..e6efe5df23 100644 --- a/modules/custom/az_person/az_person_profiles_import/migrations/az_person_profiles_import.yml +++ b/modules/custom/az_person/az_person_profiles_import/migrations/az_person_profiles_import.yml @@ -42,6 +42,10 @@ source: - name: degrees selector: 'Degrees' + - + name: image_url + label: 'Image URL' + selector: 'Person/photo_url' process: nid: diff --git a/modules/custom/az_person/az_person_profiles_import/src/EventSubscriber/AZPersonProfilesImportEventSubscriber.php b/modules/custom/az_person/az_person_profiles_import/src/EventSubscriber/AZPersonProfilesImportEventSubscriber.php index 9c52e77801..f062f968c4 100644 --- a/modules/custom/az_person/az_person_profiles_import/src/EventSubscriber/AZPersonProfilesImportEventSubscriber.php +++ b/modules/custom/az_person/az_person_profiles_import/src/EventSubscriber/AZPersonProfilesImportEventSubscriber.php @@ -2,6 +2,7 @@ namespace Drupal\az_person_profiles_import\EventSubscriber; +use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Messenger\Messenger; use Drupal\migrate\Event\MigrateEvents; @@ -82,6 +83,45 @@ public function onPostRowSave(MigratePostRowSaveEvent $event) { if ($migration === 'az_person_profiles_import') { $person = $this->entityTypeManager->getStorage('node')->load($id); if (!empty($person)) { + $image = $event->getRow()->get('image_url'); + // See if we have an image url. + // @todo move this functionality to process plugin. + if (!empty($image) && UrlHelper::isValid($image)) { + $fileStorage = $this->entityTypeManager->getStorage('file'); + // Check if we already have a managed file for this Url. + $files = $fileStorage->loadByProperties(['uri' => $image]); + $file = reset($files); + if (!$file) { + $file = $fileStorage->create([ + 'uri' => $image, + ]); + $file->save(); + } + // Hook up file to media field or create new media entity. + if ($person->hasField('field_az_media_image')) { + /** @var \Drupal\media\MediaInterface $media */ + $media = $person->field_az_media_image->entity; + // Media entity needs to be updated. + if ($media) { + // @todo cleanup this field access do be configured by process plugin. + // @phpstan-ignore-next-line + $media->field_media_az_image->target_id = $file->id(); + $media->save(); + } + else { + // Media doesn't exist yet, need to create it. + $media = $this->entityTypeManager->getStorage('media')->create([ + 'bundle' => 'az_image', + 'field_media_az_image' => [ + 'target_id' => $file->id(), + ], + ]); + $media->save(); + $person->field_az_media_image->target_id = $media->id(); + $person->save(); + } + } + } $url = $person->toUrl()->toString(); $this->messenger->addMessage(t('Imported @name.', [ '@link' => $url,