BynderMediaApi.inc in Bynder 7
Manages the Bynder media browser functionality
File
includes/BynderMediaApi.incView source
<?php
/**
* @file
* Manages the Bynder media browser functionality
*/
use Bynder\Api\BynderApiFactory;
use GuzzleHttp\Client;
class BynderMediaApi {
const BYNDER_INTEGRATION_ID = '67e4cef1-320a-4ec8-b307-0a6614325259';
private $bynderApi;
private $assetBankManager;
private function __construct() {
try {
$tokens = $this
->hasAccessToken();
$settings = array(
'consumerKey' => variable_get('bynder_oauth_consumer', ''),
'consumerSecret' => variable_get('bynder_oauth_consumer_secret', ''),
'token' => !$tokens ? variable_get('bynder_oauth_token', '') : $tokens['oauth_token'],
'tokenSecret' => !$tokens ? variable_get('bynder_oauth_token_secret', '') : $tokens['oauth_token_secret'],
'baseUrl' => variable_get('bynder_url', ''),
);
if (!variable_get('bynder_url')) {
$settings = variable_get('temp_derivatives_settings');
}
if ($proxyUrl = variable_get('bynder_proxy_url')) {
$proxyUrl = str_replace([
'tcp://',
'https://',
], 'http://', $proxyUrl);
$settings['requestOptions'] = [
'proxy' => $proxyUrl,
];
}
$this->bynderApi = BynderApiFactory::create($settings);
$this->assetBankManager = $this->bynderApi
->getAssetBankManager();
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
}
}
public static function getBynderApi() {
return new BynderMediaApi();
}
public function getAssetBankManager() {
if (!isset($this->assetBankManager)) {
$this
->getBynderApi();
}
return $this->assetBankManager;
}
public function getObjectById($id) {
try {
$result = $this
->getAssetBankManager()
->getMediaInfo($id)
->wait();
return $result;
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
return false;
}
}
/**
* Get brands.
*/
public function getMediaBrands() {
try {
$result = $this
->getAssetBankManager()
->getBrands()
->wait();
return $result;
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('Could not retrieve brand list'), 'error');
return false;
}
}
/**
* Get Media list.
*/
public function getMediaList($query = null) {
$query['page'] = isset($query['page']) ? $query['page'] : 1;
try {
$result = $this
->getAssetBankManager()
->getMediaList($query)
->wait();
return $result;
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('Could not retrieve search results'), 'error');
return false;
}
}
/**
* Get Metaproperties.
*/
public function getMetaProperties() {
if (!($metaProperties = cache_get('bynder_media_metaproperties', 'cache_bynder'))) {
try {
$result = $this
->getAssetBankManager()
->getMetaProperties()
->wait();
cache_set('bynder_media_metaproperties', $result, 'cache_bynder', CACHE_TEMPORARY);
return $result;
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('Could not retrieve metaproperties:'), 'error');
return false;
}
}
else {
return $metaProperties->data;
}
}
public function initiateOAuthTokenRetrieval() {
$settings = array(
'consumerKey' => variable_get('bynder_oauth_consumer', ''),
'consumerSecret' => variable_get('bynder_oauth_consumer_secret', ''),
'baseUrl' => variable_get('bynder_url', ''),
);
$this->bynderApi = BynderApiFactory::create($settings);
try {
$requestToken = $this->bynderApi
->getRequestToken()
->wait();
parse_str($requestToken, $tokenArray);
$token = $tokenArray['oauth_token'];
$tokenSecret = $tokenArray['oauth_token_secret'];
$_SESSION['bynder_data'] = array(
'oauth_token' => $token,
'oauth_token_secret' => $tokenSecret,
'isRequestToken' => true,
);
$query = array(
'oauth_token' => $token,
// Would be the url pointing to this script for example.
'callback' => url('bynder-oauth', array(
'absolute' => true,
)),
);
return url(variable_get('bynder_url') . '/api/v4/oauth/authorise', [
'query' => $query,
]);
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('An error occurred while trying to login'), 'error');
return false;
}
}
public static function hasSettings() {
$settings = array(
'consumerKey' => variable_get('bynder_oauth_consumer', false),
'consumerSecret' => variable_get('bynder_oauth_consumer_secret', false),
'baseUrl' => variable_get('bynder_url', false),
);
foreach ($settings as $setting) {
if (!$setting) {
return false;
}
}
return true;
}
public static function hasAccessToken() {
$tokens = isset($_SESSION['bynder_data']) ? $_SESSION['bynder_data'] : array();
// Required tokens need to be stored in the session.
if (!isset($tokens['oauth_token']) || !isset($tokens['oauth_token_secret'])) {
return false;
}
return $tokens;
}
public function hasUploadPermissions() {
$user = $this->bynderApi
->getCurrentUser()
->wait();
if (isset($user)) {
$profileId = $user['profileId'];
$userProfile = $this->bynderApi
->getSecurityProfile($profileId)
->wait();
foreach ($userProfile['roles'] as $role) {
if ($role == 'MEDIAUPLOAD' || $role == 'MEDIAUPLOADFORAPPROVAL') {
return true;
}
}
}
return false;
}
public function finishOAuthTokenRetrieval() {
$tokens = $this
->hasAccessToken();
if ($tokens && isset($tokens['isRequestToken'])) {
unset($tokens['isRequestToken']);
$settings = array(
'consumerKey' => variable_get('bynder_oauth_consumer', ''),
'consumerSecret' => variable_get('bynder_oauth_consumer_secret', ''),
'token' => $tokens['oauth_token'],
'tokenSecret' => $tokens['oauth_token_secret'],
'baseUrl' => variable_get('bynder_url', ''),
);
$bynder_api = BynderApiFactory::create($settings);
foreach ($bynder_api
->getAccessToken()
->wait() as $key => $token) {
$tokens[$key] = $token;
}
$_SESSION['bynder_data'] = $tokens;
}
else {
drupal_set_message(t('Could not finish login, please try again'), 'error');
}
}
public function uploadFile($fileInfo) {
try {
$result = $this->assetBankManager
->uploadFileAsync($fileInfo)
->wait();
return $result;
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
}
return false;
}
public function genericRequest($url, $options = null) {
$client = new Client([
'allow_redirects' => false,
]);
return $client
->requestAsync('GET', $url)
->wait();
}
public function getDerivatives() {
try {
$result = $this->assetBankManager
->getDerivatives()
->wait();
return $result;
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('Could not retrieve account derivatives information'), 'error');
}
return false;
}
public function addAssetUsage($assetID, $usageUrl, $usageAdditional = null, $timestamp = null) {
try {
$usageProperties = [
'integration_id' => self::BYNDER_INTEGRATION_ID,
'asset_id' => $assetID,
'timestamp' => isset($timestamp) ? $timestamp : date(DateTime::ISO8601),
'uri' => $usageUrl,
'additional' => $usageAdditional,
];
return $this->assetBankManager
->createUsage($usageProperties)
->wait();
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('Could not add asset usage information'), 'error');
return false;
}
}
public function removeAssetUsage($assetID, $usageUrl = null) {
try {
$usageProperties = [
'integration_id' => self::BYNDER_INTEGRATION_ID,
'asset_id' => $assetID,
'uri' => $usageUrl,
];
return $this->assetBankManager
->deleteUSage($usageProperties)
->wait();
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('Could not add asset usage information'), 'error');
return false;
}
}
public function getAssetUsages($assetID) {
try {
return $this->assetBankManager
->getUsage([
'asset_id' => $assetID,
])
->wait();
} catch (Exception $e) {
watchdog('bynder', $e
->getMessage());
drupal_set_message(t('Could not add asset usage information'), 'error');
return false;
}
}
public static function getIntegrationId() {
return self::BYNDER_INTEGRATION_ID;
}
}
Classes
Name | Description |
---|---|
BynderMediaApi |