media_acquiadam-8.x-1.46/src/Acquiadam.php

src/Acquiadam.php
<?php

namespace Drupal\media_acquiadam;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\ServerException;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Class Acquiadam.
 *
 * Abstracts away details of the REST API.
 */
class Acquiadam implements AcquiadamInterface, ContainerInjectionInterface {

  /**
   * Temporary asset data storage.
   *
   * @var array
   *
   * @phpstan-var array<string, \Drupal\media_acquiadam\Entity\Asset|null>
   */
  protected static $cachedAssets = [];

  /**
   * The Acquia DAM client service.
   *
   * @var \Drupal\media_acquiadam\Client
   */
  protected $acquiaDamClient;

  /**
   * Acquia DAM logging service.
   *
   * @var \Drupal\Core\Logger\LoggerChannelInterface
   */
  protected $loggerChannel;

  /**
   * Acquiadam constructor.
   *
   * @param \Drupal\media_acquiadam\Client $client
   *   An instance of Client that we can get a acquiadam client from.
   * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $loggerChannelFactory
   *   The Drupal LoggerChannelFactory service.
   */
  public function __construct(Client $client, LoggerChannelFactoryInterface $loggerChannelFactory) {
    $this->acquiaDamClient = $client;
    $this->loggerChannel = $loggerChannelFactory->get('media_acquiadam');
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('media_acquiadam.client'),
      $container->get('logger.factory')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function __call($name, array $arguments) {
    $method_variable = [$this->acquiaDamClient, $name];
    return is_callable($method_variable) ?
      call_user_func_array($method_variable, $arguments) : NULL;
  }

  /**
   * Gets asset data from the DAM.
   *
   * @param string $assetId
   *   The asset ID.
   *
   * @return \Drupal\media_acquiadam\Entity\Asset
   *   The asset.
   *
   * @throws \GuzzleHttp\Exception\GuzzleException
   * @throws \Exception
   */
  public function getAsset(string $assetId) {
    $asset = $this->staticAssetCache('get', $assetId);

    try {
      if (is_null($asset)) {
        $this->staticAssetCache(
          'set',
          $assetId,
          $this->acquiaDamClient->getAsset($assetId)
        );
      }
    }
    catch (ClientException $x) {
      $this->loggerChannel->warning(
        'Received a missing asset response when trying to load asset @assetID. Was the asset deleted in Acquia DAM? DAM API client returned a @code exception code with the following message: %message',
        [
          '@assetID' => $assetId,
          '@code' => $x->getCode(),
          '%message' => $x->getMessage(),
        ]
      );
      throw $x;
    }
    catch (ServerException $exception) {
      $this->loggerChannel->warning('Server error when reaching the DAM to load asset @assetID. @code %message', [
        '@assetID' => $assetId,
        '@code' => $exception->getCode(),
        '%message' => $exception->getMessage(),
      ]);
      throw $exception;
    }
    catch (\Exception $x) {
      $this->loggerChannel->debug(
        'Unexpected exception when trying to load asset @assetID. @code %message', [
          '@assetID' => $assetId,
          '@code' => $x->getCode(),
          '%message' => $x->getMessage(),
        ]
      );
      throw $x;
    }

    return $this->staticAssetCache('get', $assetId);
  }

  /**
   * Static asset cache helper.
   *
   * This is a public standalone method to enable unit testing the behavior.
   *
   * @param string $op
   *   The operation to perform. One of get, set, or clear.
   * @param string|null $assetId
   *   The asset ID when using get or set.
   * @param \Drupal\media_acquiadam\Entity\Asset|null $asset
   *   The data to store under the given asset ID.
   *
   * @return \Drupal\media_acquiadam\Entity\Asset|null
   *   The static cache or NULL if unset.
   */
  public function staticAssetCache(string $op, string $assetId = NULL, $asset = NULL) {
    if ('set' == $op) {
      return static::$cachedAssets[$assetId] = $asset;
    }

    if ('clear' == $op) {
      static::$cachedAssets = [];
    }

    return static::$cachedAssets[$assetId] ?? NULL;
  }

}

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

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