You are here

protected function BynderSearch::prepareEntities in Bynder 8.2

Same name and namespace in other branches
  1. 8.3 src/Plugin/EntityBrowser/Widget/BynderSearch.php \Drupal\bynder\Plugin\EntityBrowser\Widget\BynderSearch::prepareEntities()
  2. 8 src/Plugin/EntityBrowser/Widget/BynderSearch.php \Drupal\bynder\Plugin\EntityBrowser\Widget\BynderSearch::prepareEntities()
  3. 4.0.x src/Plugin/EntityBrowser/Widget/BynderSearch.php \Drupal\bynder\Plugin\EntityBrowser\Widget\BynderSearch::prepareEntities()
1 call to BynderSearch::prepareEntities()
BynderSearch::submit in src/Plugin/EntityBrowser/Widget/BynderSearch.php

File

src/Plugin/EntityBrowser/Widget/BynderSearch.php, line 244

Class

BynderSearch
Uses a Bynder API to search and provide entity listing in a browser's widget.

Namespace

Drupal\bynder\Plugin\EntityBrowser\Widget

Code

protected function prepareEntities(array $form, FormStateInterface $form_state) {
  if (!$this
    ->checkType()) {
    return [];
  }
  $media = [];
  $selected_ids = array_keys(array_filter($form_state
    ->getValue('selection', [])));
  $media_list = $form_state
    ->get('bynder_media_list');

  /** @var \Drupal\media\MediaTypeInterface $type */
  $type = $this->entityTypeManager
    ->getStorage('media_type')
    ->load($this->configuration['media_type']);
  $plugin = $type
    ->getSource();
  $source_field = $plugin
    ->getConfiguration()['source_field'];
  foreach ($selected_ids as $bynder_id) {
    $mid = $this->entityTypeManager
      ->getStorage('media')
      ->getQuery()
      ->condition($source_field, $bynder_id)
      ->range(0, 1)
      ->execute();
    if ($mid) {
      $entity = $this->entityTypeManager
        ->getStorage('media')
        ->load(reset($mid));
    }
    else {
      $entity = Media::create([
        'bundle' => $type
          ->id(),
        $source_field => $bynder_id,
      ]);
    }
    if (!empty($media_list['media'][$bynder_id])) {
      $filtered_remote_metadata = $entity
        ->getSource()
        ->filterRemoteMetadata($media_list['media'][$bynder_id]);
      $entity
        ->set(BynderMetadataItem::METADATA_FIELD_NAME, Json::encode($filtered_remote_metadata));
    }
    $media[] = $entity;
  }
  return $media;
}