🇧🇪Belgium @mikell

Account created on 2 January 2012, almost 13 years ago
#

Recent comments

🇧🇪Belgium mikell

Mapping is way easier, thanks for great work!
Can confirm this patch applies and works for me.

🇧🇪Belgium mikell

There is a small difference between version 4.x-dev and 4.2.1, should we perhaps open a separate issue for this? In the meantime, I’ve already added a patch for version 4.2.1

🇧🇪Belgium mikell

The mapping logic and list of properties that can be mapped is defined in the source plugin Bynder.php.
I created a custom media source plugin which extends the Bynder one.
In the hook_media_source_info_alter I have set my custom source plugin for the Bynder one.
In hook_bynder_media_update_alter you can fix the field mapping.

Code can probably be better but this worked for me.

<?php
use Drupal\custom_module\Plugin\media\Source\CustomBynder;
use Drupal\media\MediaInterface;

/**
 * Implements hook_media_source_info_alter().
 */
function custom_module_media_source_info_alter(array &$sources) {
  $sources['bynder']['class'] = CustomBynder::class;
}

/**
 * Implements hook_bynder_media_update_alter().
 *
 * Save mapped metadata to the media entity.
 */
function custom_module_bynder_media_update_alter(MediaInterface $media, array $item, &$has_changed) {
  /** @var \Drupal\media\MediaTypeInterface $bundle */
  $bundle = $media->get($media->getEntityType()->getKey('bundle'))->entity;

  $mapping = [
    'field_property_usage_rights' => 'property_Usage_Rights',
    'field_property_category' => 'property_Category',
    'field_bynder_type' => 'property_Asset_Type',
    'field_property_asset_sub' => 'property_Asset_Sub',
  ];

  foreach ($bundle->getFieldMap() as $metadata_attribute_name => $entity_field_name) {
    if (array_key_exists($metadata_attribute_name, $mapping)) {
      $metadata_attribute_name = $mapping[$entity_field_name];
    }
    if (array_key_exists($metadata_attribute_name, $item) && $media->hasField($entity_field_name)) {
      $has_changed = TRUE;
      $media->set($entity_field_name, $item[$metadata_attribute_name]);
    }
  }

  $media->updateQueuedThumbnail();
}
<?php
declare(strict_types=1);

namespace Drupal\custom_module\Plugin\media\Source;

use Drupal\bynder\Plugin\media\Source\Bynder;

/**
 * Plugin overwrite for 'bynder'
 *
 * Extends the plugin to provide the extra properties.
 *
 */
final class CustomBynder extends Bynder {

  /**
   * {@inheritdoc}
   */
  public function getMetadataAttributes(): array {
    $attributes = parent::getMetadataAttributes();

    return array_merge($attributes, [
      'property_usage_rights' => $this->t('Property Usage Rights'),
      'property_category' => $this->t('Property Category'),
      'property_asset_type' => $this->t('Property Asset Type'),
      'property_asset_sub' => $this->t('Property Asset Sub'),
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function getRemoteMetadataProperties(): array {
    $properties = parent::getRemoteMetadataProperties();

    return array_merge($properties, [
      'property_Usage_Rights',
      'property_Category',
      'property_Asset_Type',
      'property_Asset_Sub',

    ]);
  }

}

🇧🇪Belgium mikell

Fixed the issue with patch #185 for me after updating to the module first to 7.x-2.7

🇧🇪Belgium mikell

Also fixes the limitation to the target bundles instead of all vocabulary terms.

Production build 0.71.5 2024