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

src/AssetData.php
<?php

namespace Drupal\media_acquiadam;

use Drupal\Core\Database\Connection;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\media_acquiadam\Entity\Asset;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Acquia DAM Asset Data service implementation.
 */
class AssetData implements AssetDataInterface, ContainerInjectionInterface {

  /**
   * The database connection to use.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $connection;

  /**
   * Constructs a new asset data service.
   *
   * @param \Drupal\Core\Database\Connection $connection
   *   The database connection to use.
   */
  public function __construct(Connection $connection) {
    $this->connection = $connection;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container->get('database'));
  }

  /**
   * {@inheritdoc}
   */
  public function delete($assetID = NULL, $name = NULL) {
    $query = $this->connection->delete('acquiadam_assets_data');
    // Cast scalars to array so we can consistently use an IN condition.
    if (isset($assetID)) {
      $query->condition('asset_id', (array) $assetID, 'IN');
    }
    if (isset($name)) {
      $query->condition('name', (array) $name, 'IN');
    }
    $query->execute();
  }

  /**
   * Check if the given asset is different than what is stored.
   *
   * @param \Drupal\media_acquiadam\Entity\Asset $asset
   *   The current version of the asset.
   *
   * @return bool
   *   TRUE if the given asset is a different version than what has been stored.
   */
  public function isUpdatedAsset(Asset $asset) {
    $latest_known_upload_date = $this->get($asset->id, 'file_upload_date');
    $actual_upload_date = strtotime($asset->file_upload_date);
    // Using loose equality to allow int/string comparison.
    return $latest_known_upload_date != $actual_upload_date;
  }

  /**
   * {@inheritdoc}
   */
  public function get($assetID = NULL, $name = NULL) {
    $query = $this->connection->select('acquiadam_assets_data', 'ad')->fields(
        'ad'
      );
    if (isset($assetID)) {
      $query->condition('asset_id', $assetID);
    }
    if (isset($name)) {
      $query->condition('name', $name);
    }
    $result = $query->execute();

    // A specific value for a specific asset ID was requested.
    if (isset($assetID) && isset($name)) {
      $result = $result->fetchAllAssoc('asset_id');
      if (isset($result[$assetID])) {
        return $result[$assetID]->serialized ?
          unserialize($result[$assetID]->value, ['allowed_classes' => FALSE]) : $result[$assetID]->value;
      }
      return NULL;
    }

    $return = [];

    // If only specific assets was requested.
    if (isset($assetID) || isset($name)) {
      $key = isset($assetID) ? 'name' : 'asset_id';

      foreach ($result as $record) {
        $return[$record->{$key}] = $record->serialized ?
          unserialize($record->value, ['allowed_classes' => FALSE]) : $record->value;
      }
      return $return;
    }

    // Everything was requested.
    foreach ($result as $record) {
      $return[$record->asset_id][$record->name] = $record->serialized ?
        unserialize($record->value, ['allowed_classes' => FALSE]) : $record->value;
    }

    return $return;
  }

  /**
   * {@inheritdoc}
   */
  public function set($assetID, $name, $value) {
    $serialized = (int) !is_scalar($value);
    if ($serialized) {
      $value = serialize($value);
    }
    $this->connection->merge('acquiadam_assets_data')->keys(
      [
        'asset_id' => $assetID,
        'name' => $name,
      ]
    )->fields(
      [
        'value' => $value,
        'serialized' => $serialized,
      ]
    )->execute();
  }

}

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

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