public function Api::getStats in SendGrid Integration 8
Same name and namespace in other branches
- 8.2 modules/sendgrid_integration_reports/src/Api.php \Drupal\sendgrid_integration_reports\Api::getStats()
Returns stats.
Parameters
string $cid: Cache Id.
array $categories: Array of categories.
string|null $start_date: Start date.
string|null $end_date: End date.
bool $refresh: Flag is cache should be refreshed.
string $subuser: Optional subuser to report on.
Return value
array|bool Array of stats data.
File
- modules/
sendgrid_integration_reports/ src/ Api.php, line 187
Class
- Api
- Class SendGridReportsController.
Namespace
Drupal\sendgrid_integration_reportsCode
public function getStats($cid, array $categories = [], $start_date = NULL, $end_date = NULL, $refresh = FALSE, $subuser = '') {
if (!$refresh && ($cache = $this->cacheFactory
->get($this->bin)
->get($cid))) {
return $cache->data;
}
// Load key from variables and throw errors if not there.
if (empty($this->apiKey)) {
return [];
}
// Get config.
$config = $this->configFactory
->get('sendgrid_integration_reports.settings')
->get();
if ($start_date) {
$start_date = date('Y-m-d', strtotime($start_date));
}
else {
// Set start date and end date for global stats - default 30 days back.
$start_date = empty($config['start_date']) ? date('Y-m-d', strtotime('today - 30 days')) : $config['start_date'];
}
if ($end_date) {
$end_date = date('Y-m-d', strtotime($end_date));
}
else {
// Set the end date which defaults to today.
$end_date = empty($config['end_date']) ? date('Y-m-d', strtotime('today')) : $config['end_date'];
}
// Set aggregation of stats - default day.
$aggregated_by = isset($config['aggregated_by']) ? $config['aggregated_by'] : 'day';
$path = 'stats';
$query = [
'start_date' => $start_date,
'end_date' => $end_date,
'aggregated_by' => $aggregated_by,
];
if ($categories) {
$path = 'categories/stats';
$query['categories'] = $categories;
$query_str = http_build_query($query, NULL, '&', PHP_QUERY_RFC3986);
$query = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $query_str);
}
// Lets attempt the request and catch an error if it fails.
$stats_data = $this
->getResponse($path, $query, $subuser);
if (!$stats_data) {
return [];
}
$data = [];
foreach ($stats_data as $item) {
$data['global'][] = [
'date' => $item->date,
'opens' => $item->stats[0]->metrics->opens,
'processed' => $item->stats[0]->metrics->processed,
'requests' => $item->stats[0]->metrics->requests,
'clicks' => $item->stats[0]->metrics->clicks,
'delivered' => $item->stats[0]->metrics->delivered,
'deferred' => $item->stats[0]->metrics->deferred,
'unsubscribes' => $item->stats[0]->metrics->unsubscribes,
'unsubscribe_drops' => $item->stats[0]->metrics->unsubscribe_drops,
'invalid_emails' => $item->stats[0]->metrics->invalid_emails,
'bounces' => $item->stats[0]->metrics->bounces,
'bounce_drops' => $item->stats[0]->metrics->bounce_drops,
'unique_clicks' => $item->stats[0]->metrics->unique_clicks,
'blocks' => $item->stats[0]->metrics->blocks,
'spam_report_drops' => $item->stats[0]->metrics->spam_report_drops,
'spam_reports' => $item->stats[0]->metrics->spam_reports,
'unique_opens' => $item->stats[0]->metrics->unique_opens,
];
}
// Save data to cache.
$this
->setCache($cid, $data);
return $data;
}