request->get('user_id')?? '1';
$view_id= $this->request->get('view_id');
$chart = $this->request->get('chart') ?? false;
/** google params **/
$get_metrics = $this->request->get('metric') ?? 'users';
$get_dimensions = $this->request->get('dimension');
$get_start_date = $this->request->get('start') ?? '30daysAgo';
$get_end_date = $this->request->get('end') ?? 'today';
if (empty($view_id)) {
$result = [];
$projects = Project::find(['user_id' => $user_id]);
foreach ($projects as $project) {
$view_id = (string)$project->ga_view_id;
if (!empty($view_id)) {
$result[] = $this->sendGaRequest($project->name, $view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date, $chart);
}
}
}
else {
$project = Project::findFirst(['ga_view_id' => $view_id]);
$result = $this->sendGaRequest($project->name , $view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date, $chart);
}
return $result;
}
public function sendGaRequest($project_name, $view, $get_metrics, $get_dimensions, $start, $end, $chart = false) {
putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/phalcon/'.self::SECRET_JSON);
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setScopes([self::SCOPE]);
$analytics = new Google_Service_AnalyticsReporting($client);
/** Create the DateRange object. **/
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate($start);
$dateRange->setEndDate($end);
/** Create the Metrics object. **/
$metrics = [];
$get_metrics = explode(',', $get_metrics);
foreach ($get_metrics as $metric) {
$metrics_obj = new Google_Service_AnalyticsReporting_Metric();
$metrics_obj->setExpression('ga:'.$metric);
$metrics_obj->setAlias('ga:'.$metric);
$metrics[] = $metrics_obj;
}
/** Create the Dimensions object. **/
if (!empty($get_dimensions)) {
$dimensions = [];
$get_dimensions = explode(',', $get_dimensions);
foreach ($get_dimensions as $dimension) {
$dimension_obj = new Google_Service_AnalyticsReporting_Dimension();
$dimension_obj->setName("ga:".$dimension);
$dimensions[] = $dimension_obj;
}
}
//Create the ReportRequest object.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId($view);
$request->setDateRanges($dateRange);
$request->setIncludeEmptyRows(true);
if (!empty($dimensions)) {
$request->setDimensions(array($dimensions));
}
$request->setMetrics(array($metrics));
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests(array($request));
$response = $analytics->reports->batchGet($body);
//have to rewrite code below (2 rows)
$response = $response->toSimpleObject();
$response = $response->reports[0]['data']['rows'];
if ($chart) {
$result = self::responseChartTransform($response, $project_name);
} else {
$result = self::responseDataTransform($response, $project_name);
}
return $result;
}
public static function responseDataTransform(array $response, $project_name) {
$result = [];
foreach ($response as $item) {
$metric_val = $item['metrics'][0]['values'];
$dimension_val = $item['dimensions'][0];
$result['name'] = $project_name;
if (count($metric_val) > 1) {
for ($i = 0; $i < count($metric_val); $i++) {
$result[$dimension_val][] = $metric_val[$i];
}
} else {
$result[$dimension_val] = $metric_val[0];
}
}
return $result;
}
public static function responseChartTransform(array $response, $project_name) {
$result = [];
foreach ($response as $item) {
$metric_val = $item['metrics'][0]['values'];
$result['name'] = $project_name;
if (count($metric_val) > 1) {
for ($i = 0; $i < count($metric_val); $i++) {
$result['data'][] = (int)$metric_val[$i];
}
} else {
$result['data'][] = (int)$metric_val[0];
}
}
return $result;
}
public function printResults($reports) {
$res = '';
for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
$report = $reports[ $reportIndex ];
$header = $report->getColumnHeader();
$dimensionHeaders = $header->getDimensions();
$metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
$rows = $report->getData()->getRows();
for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
$row = $rows[ $rowIndex ];
$dimensions = $row->getDimensions();
$metrics = $row->getMetrics();
for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
}
for ($j = 0; $j < count( $metricHeaders ) && $j < count( $metrics ); $j++) {
$entry = $metricHeaders[$j];
$values = $metrics[$j];
//print("Metric type: " . $entry->getType() . "\n" );
for ( $valueIndex = 0; $valueIndex < count( $values->getValues() ); $valueIndex++ ) {
$value = $values->getValues()[ $valueIndex ];
$res .= "" . $entry->getName() . ": " . $value . '
';
}
}
}
}
return $res;
}
}