src/Bi/Connect/AdobeConnect.php
<?php
//
//namespace Bi\Connect;
//
//use AdobeMarketingCloud\Api\SuiteApi;
//use AdobeMarketingCloud\Client as AdobeClient;
//use AdobeMarketingCloud\HttpClient\Curl as AdobeCurl;
//use Bi\Connect\Base\BaseConnect;
//use Bi\Connect\Exceptions\AdobeConnectException;
//use Carbon\Carbon;
//use Tightenco\Collect\Support\Collection;
//
///**
// * Class AdobeConnect.
// */
//class AdobeConnect extends BaseConnect
//{
// private $apiUsername;
// private $apiPassword;
// private $apiReportSuiteId;
//
// /**
// * @var \AdobeMarketingCloud\Api\SuiteApi
// */
// protected $apiClient;
//
// /**
// * AdobeConnect constructor.
// *
// * @param $username
// * @param $password
// * @param $reportSuiteId
// */
// public function __construct($username, $password, $reportSuiteId)
// {
// $this->apiUsername = $username;
// $this->apiPassword = $password;
// $this->apiReportSuiteId = $reportSuiteId;
// }
//
// /**
// * @return \AdobeMarketingCloud\Api\SuiteApi
// */
// public function auth()
// {
// $adobeClient = new AdobeClient(new AdobeCurl([
// 'debug' => false,
// ]));
//
// $adobeClient->authenticate($this->apiUsername, $this->apiPassword);
// $adobeClient->getHttpClient()->setOption('api_version', '1.4');
// $adobeClient->setEndpoint('https://api5.omniture.com/admin/1.4/rest/');
//
// return $this->apiClient = $adobeClient->getSuiteApi();
// }
//
// /**
// * Put report in queue and get de ID for later use
// * for now $granularity accepts only 'day'.
// *
// * @param Carbon $dateFrom
// * @param Carbon $dateTo
// * @param array $metrics
// * @param array $elements
// * @param array $segments
// * @param string $granularity
// *
// * @throws AdobeConnectException
// *
// * @return array|null
// */
// public function createReport(
// Carbon $dateFrom,
// Carbon $dateTo,
// array $metrics = [],
// array $elements = [],
// array $segments = [],
// $granularity = 'year'
// ) {
// if (($this->apiClient instanceof SuiteApi) == false) {
// throw new AdobeConnectException('You need to authenticate first with auth()');
// }
//
// $defaultOptions = [
// 'reportDescription' => [
// 'reportSuiteID' => $this->apiReportSuiteId,
// 'dateFrom' => $dateFrom->format('Y-m-d'),
// 'dateTo' => $dateTo->format('Y-m-d'),
// 'dateGranularity' => $granularity,
// 'metrics' => $this->formatApiMetricsOptions($metrics),
// 'elements' => $this->formatApiElementOptions($elements),
// 'segments' => $this->formatApiSegmentsOptions($segments),
// ],
// ];
//
// $response = $this->apiClient->post('Report.Queue', $defaultOptions);
//
// if (is_bool($response) === false && array_key_exists('error', $response) === true) {
// return $response;
// }
//
// return isset($response['reportID']) ? $response['reportID'] : null;
// }
//
// /**
// * @param $array
// *
// * @return array
// */
// protected function convertSimpleResponseToObject(array $array)
// {
// $arr = [];
//
// foreach ($array as $item) {
// $obj = new \stdClass();
// foreach ($item as $k => $v) {
// $obj->{$k} = $v;
// }
// $arr[] = $obj;
// }
//
// return $arr;
// }
//
// /**
// * Format the options to API defaults.
// *
// * @param array $option
// *
// * @return array
// */
// protected function formatApiMetricsOptions(array $option = [])
// {
// $formattedValue = [];
//
// foreach ($option as $k => $item) {
// $formattedValue[$k]['id'] = $item;
// }
//
// return $formattedValue;
// }
//
// /**
// * @param array $option
// *
// * @return array
// */
// protected function formatApiSegmentsOptions(array $option = [])
// {
// $formattedValue = [];
// $iterator = 0;
// foreach ($option as $k => $item) {
// if (\is_array($item)) {
// $formattedValue[$iterator]['id'] = $k;
// $formattedValue[$iterator] = array_merge($formattedValue[$iterator], $item);
// $iterator++;
// continue;
// }
//
// $formattedValue[$iterator]['id'] = $item;
// $iterator++;
// }
//
// return $formattedValue;
// }
//
// /**
// * Format the options to API defaults.
// *
// * @param array $option
// *
// * @return array
// */
// protected function formatApiElementOptions($option = [])
// {
// $formattedValue = [];
// $iterator = 0;
// foreach ($option as $k => $item) {
// if (\is_array($item)) {
// $formattedValue[$iterator]['id'] = $k;
// $formattedValue[$iterator] = array_merge($formattedValue[$iterator], $item);
// $iterator++;
// continue;
// }
//
// $formattedValue[$iterator]['id'] = $item;
// $iterator++;
// }
//
// return $formattedValue;
// }
//
// /**
// * @param $response
// *
// * @throws AdobeConnectException
// *
// * @return ConnectResponse
// */
// protected function formatResponse($response)
// {
// if (isset($response['error'])) {
// return new ConnectResponse(
// [],
// ['error' => $response['error']],
// $response
// );
// }
//
// $header = $this->formatResponseHeader($response['report']);
// $body = $this->formatResponseBody($response['report']['data'], $header, $response);
//
// return new ConnectResponse(
// $header,
// $body,
// $response
// );
// }
//
// /**
// * @param $response
// *
// * @return array
// */
// protected function formatResponseHeader($response)
// {
// $header = [];
// $metrics = $response['metrics'];
//
// if (isset($response['segments'])) {
// $metrics = $response['segments'];
// }
//
// $elements = $response['elements'];
//
// $header['elements'] = $elements;
// $header['metrics'] = $metrics;
//
// return $header;
// }
//
// /**
// * @param $response
// * @param $header
// *
// * @throws AdobeConnectException
// *
// * @return array
// */
// protected function formatResponseBody($response, $header, $fullResponse)
// {
// $body = [];
// $bodyKey = 0;
//
// foreach ($response as $responseKey => $responseRow) {
// $body[$bodyKey] = '';
//
// try {
// if (strpos($responseRow['name'], '-') === false) {
// $reportStartDate = new Carbon($responseRow['name']);
// $reportEndDate = new Carbon($responseRow['name']);
//
// /*
// * If MONTH granularity
// */
// if (strpos($responseRow['name'], ' ') === false) {
// $reportStartDate->startOfYear();
// $reportEndDate->endOfYear();
// }
//
// /*
// * If YEAR granularity
// */
// if (strpos($responseRow['name'], ' ') !== false) {
// $reportStartDate->startOfMonth();
// $reportEndDate->endOfMonth();
// }
//
// /*
// * If DAY granularity
// */
// if (count(explode(' ', $responseRow['name'])) > 2) {
// $reportStartDate = new Carbon($responseRow['name']);
// $reportEndDate = new Carbon($responseRow['name']);
// }
// }
//
// if (strpos($responseRow['name'], '-') !== false) {
// list($reportStartDate, $reportEndDate) = explode(' - ', $responseRow['name']);
// $reportStartDate = new Carbon($reportStartDate);
// $reportEndDate = new Carbon($reportEndDate);
// }
//
// $reportStartDate->startOfDay();
// $reportEndDate->startOfDay();
//
// $body[$bodyKey]['startDate'] = $reportStartDate;
// $body[$bodyKey]['endDate'] = $reportEndDate;
// } catch (\Exception $e) {
// throw new AdobeConnectException('Error parsing returned date interval from Adobe');
// }
//
// if (isset($responseRow['breakdown'])) {
// $body[$bodyKey]['type'] = 'breakdown';
// $metrics = $this->formatResponseBodyBreakdown(
// $responseRow['breakdown'],
// $header
// );
//
// $body[$bodyKey] = array_merge(
// $body[$bodyKey],
// $metrics
// );
// }
//
// if (! isset($responseRow['breakdown'])) {
// $body[$bodyKey]['type'] = 'simple';
// $metrics = $this->formatResponseBodyWithoutBreakdown(
// $responseRow,
// $header['metrics']
// );
// $body[$bodyKey] = array_merge(
// $body[$bodyKey],
// $metrics
// );
// }
//
// $bodyKey++;
// }
//
// return $body;
// }
//
// /**
// * @param $bodyBreakdown
// * @param $header
// * @param int $level
// *
// * @return array
// */
// protected function formatResponseBodyBreakdown($bodyBreakdown, $header, $level = 0)
// {
// $body = [];
// $elements = (new Collection($header['elements']))->pluck('id')->all();
//
// foreach ($bodyBreakdown as $itemKey => $item) {
// if (isset($item['breakdown'])) {
// $body[$elements[$level]][$itemKey] = $this->formatResponseBodyBreakdown(
// $item['breakdown'],
// $header,
// $level + 1
// );
// $body[$elements[$level]][$itemKey]['name'] = $item['name'];
//
// foreach ($header['metrics'] as $headerKey1 => $headerItem1) {
// $body[$elements[$level]][$itemKey][$headerItem1['id']] = $item['counts'][$headerKey1];
// }
// }
//
// if (! isset($item['breakdown'])) {
// $body[$elements[$level]][$itemKey]['name'] = $item['name'];
//
// foreach ($header['metrics'] as $headerKey2 => $headerItem2) {
// $body[$elements[$level]][$itemKey][$headerItem2['id']] = $item['counts'][$headerKey2];
// }
// }
// }
//
// return $body;
// }
//
// /**
// * @param array $responseRow
// * @param array $responseHeader
// *
// * @return array
// */
// protected function formatResponseBodyWithoutBreakdown(array $responseRow, array $responseHeader)
// {
// $formattedResponseRow = [];
//
// foreach ($responseHeader as $headerKey => $responseHeader) {
// $formattedResponseRow[$responseHeader['id']] = $responseRow['counts'][$headerKey];
// }
//
// return $formattedResponseRow;
// }
//
// /**
// * Return all metrics.
// *
// * @return array
// */
// public function getAllMetrics()
// {
// return $this->convertSimpleResponseToObject(
// $this->apiClient->post(
// 'Report.GetMetrics',
// [
// 'reportSuiteID' => $this->apiReportSuiteId,
// ]
// )
// );
// }
//
// /**
// * Return all elements.
// *
// * @return array
// */
// public function getAllElements()
// {
// return $this->convertSimpleResponseToObject(
// $this->apiClient->post(
// 'Report.GetElements',
// [
// 'reportSuiteID' => $this->apiReportSuiteId,
// ]
// )
// );
// }
//
// /**
// * Get the report from Adobe Qqueue.
// *
// * @param int $reportId
// *
// * @throws AdobeConnectException
// *
// * @return ConnectResponse
// */
// public function getQueuedReport($reportId)
// {
// if (is_int($reportId) === false) {
// throw new AdobeConnectException('Report ID must be integer');
// }
//
// return $this->response(
// $this->apiClient->post(
// 'Report.Get',
// [
// 'reportID' => $reportId,
// ]
// )
// );
// }
//
// /**
// * @param $username
// * @param $password
// * @param $reportSuiteId
// */
// public function setCredentials($username, $password, $reportSuiteId)
// {
// $this->apiUsername = $username;
// $this->apiPassword = $password;
// $this->apiReportSuiteId = $reportSuiteId;
// }
//}