media_external-1.0.0-alpha1/src/ExternalMediaSearch.php

src/ExternalMediaSearch.php
<?php

namespace Drupal\media_external;

use Drupal\Core\Pager\PagerManagerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\media_external\Plugin\ExternalMediaProviderManager;

/**
 * Provides search results for the external media add form.
 */
class ExternalMediaSearch {

  use StringTranslationTrait;

  /**
   * The external media provider manager.
   *
   * @var \Drupal\media_external\Plugin\ExternalMediaProviderManager
   */
  protected $externalMediaProviderManager;

  /**
   * The pager manager.
   *
   * @var \Drupal\Core\Pager\PagerManagerInterface
   */
  protected $pagerManager;

  /**
   * The external media cache wrapper.
   *
   * @var \Drupal\media_external\ExternalMediaCacheWrapperInterface
   */
  protected $cacheWrapper;

  /**
   * ExternalMediaSearch constructor.
   *
   * @param \Drupal\media_external\Plugin\ExternalMediaProviderManager $external_provider_manager
   *   The external media provider manager.
   * @param \Drupal\Core\Pager\PagerManagerInterface $pager_manager
   *   The pager manager.
   * @param \Drupal\media_external\ExternalMediaCacheWrapperInterface $cache_wrapper
   *   The external media cache wrapper.
   */
  public function __construct(ExternalMediaProviderManager $external_provider_manager, PagerManagerInterface $pager_manager, ExternalMediaCacheWrapperInterface $cache_wrapper) {
    $this->externalMediaProviderManager = $external_provider_manager;
    $this->pagerManager = $pager_manager;
    $this->cacheWrapper = $cache_wrapper;
  }

  /**
   * Search for external media items.
   *
   * @param string $provider_name
   *   The external media provider name.
   * @param string $keyword
   *   The search keyword.
   *
   * @return array
   *   An array of external media results.
   */
  public function search(string $provider_name, string $keyword): array {
    $build = [
      '#type' => 'container',
      '#attributes' => [
        'id' => 'media-library-results',
        'class' => [
          'media-library-add-form__result-wrapper',
        ],
      ],
    ];

    $build['results'] = [
      '#type' => 'container',
      '#attributes' => [
        'class' => [
          'media-library-view',
          'media-library-views-form__rows',
        ],
      ],
      '#tree' => TRUE,
    ];

    // Fetch the results for the current page.
    /** @var \Drupal\media_external\Plugin\ExternalMediaProviderInterface $provider */
    $provider = $this->externalMediaProviderManager->createInstance($provider_name);
    $results = $this->cacheWrapper->search($provider, $keyword, $this->pagerManager->findPage());

    // Update the pager.
    $this->pagerManager->createPager($results['total'], $results['per_page']);

    foreach ($results['results'] as $result) {
      $id = $result->getId();
      $build['results'][$id] = [
        '#type' => 'container',
        '#attributes' => [
          'class' => [
            'media-library-item',
            'media-library-item--grid',
            'js-media-library-import-item',
            'js-click-to-select',
          ],
        ],
      ];
      $build['results'][$id]['select_wrapper'] = [
        '#type' => 'container',
        '#attributes' => [
          'class' => [
            'media-library-item__click-to-select-checkbox',
            'js-click-to-select-checkbox',
          ],
        ],
      ];
      $build['results'][$id]['select_wrapper']['select'] = [
        '#type' => 'checkbox',
        '#title' => $this->t('Select @label', [
          '@label' => $result->getDescription() ?: $result->getAlt() ?: $id,
        ]),
        '#title_display' => 'invisible',
        '#return_value' => $id,
      ];
      $build['results'][$id]['image_wrapper'] = [
        '#type' => 'container',
        '#attributes' => [
          'class' => [
            'js-click-to-select-trigger',
            'media-library-item__click-to-select-trigger',
          ],
        ],
      ];
      $build['results'][$id]['image_wrapper']['image'] = [
        '#theme' => 'image',
        '#uri' => $result->getThumbnailUrl(),
      // '#style_name' => 'media_library',
        '#alt' => $result->getAlt(),
      ];
    }

    $build['pager'] = [
      '#type' => 'pager',
      '#route_name' => 'media_external.search',
      '#route_parameters' => [
        'provider_name' => $provider_name,
        'keyword' => $keyword,
      ],
    ];

    return $build;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc