You are here

public function MandrillReportsController::dashboard in Mandrill 8

View Mandrill dashboard report.

Return value

array Renderable array of page content.

1 string reference to 'MandrillReportsController::dashboard'
mandrill_reports.routing.yml in modules/mandrill_reports/mandrill_reports.routing.yml
modules/mandrill_reports/mandrill_reports.routing.yml

File

modules/mandrill_reports/src/Controller/MandrillReportsController.php, line 25
Contains \Drupal\mandrill_reports\Controller\MandrillReportsController.

Class

MandrillReportsController
MandrillReports controller.

Namespace

Drupal\mandrill_reports\Controller

Code

public function dashboard() {
  $content = array();

  /* @var $reports \Drupal\mandrill_reports\MandrillReportsService */
  $reports = \Drupal::service('mandrill_reports.service');
  $data = array();
  $data['user'] = $reports
    ->getUser();
  $data['all_time_series'] = $reports
    ->getTagsAllTimeSeries();
  $data['urls'] = $reports
    ->getUrls();
  $settings = array();

  // All time series chart data.
  foreach ($data['all_time_series'] as $series) {
    $settings['mandrill_reports']['volume'][] = array(
      'date' => $series['time'],
      'sent' => $series['sent'],
      'bounced' => $series['hard_bounces'] + $series['soft_bounces'],
      'rejected' => $series['rejects'],
    );
    $settings['mandrill_reports']['engagement'][] = array(
      'date' => $series['time'],
      'open_rate' => $series['sent'] == 0 ? 0 : $series['unique_opens'] / $series['sent'],
      'click_rate' => $series['sent'] == 0 ? 0 : $series['unique_clicks'] / $series['sent'],
    );
  }
  $content['info'] = array(
    '#markup' => t('The following reports are based on Mandrill data from the last 30 days. For more comprehensive data, please visit your %dashboard. %cache to ensure the data is current.', array(
      '%dashboard' => Link::fromTextAndUrl(t('Mandrill Dashboard'), Url::fromUri('https://mandrillapp.com/'))
        ->toString(),
      '%cache' => Link::fromTextAndUrl(t('Clear your cache'), Url::fromRoute('system.performance_settings'))
        ->toString(),
    )),
  );
  $content['volume'] = array(
    '#prefix' => '<h2>' . t('Sending Volume') . '</h2>',
    '#markup' => '<div id="mandrill-volume-chart"></div>',
  );
  $content['engagement'] = array(
    '#prefix' => '<h2>' . t('Average Open and Click Rate') . '</h2>',
    '#markup' => '<div id="mandrill-engage-chart"></div>',
  );

  // URL tracking table.
  $content['urls_table'] = array(
    '#type' => 'table',
    '#header' => array(
      t('URL'),
      t('Delivered'),
      t('Unique Clicks'),
      t('Total Clicks'),
    ),
    '#empty' => 'No activity yet.',
    '#prefix' => '<h2>' . t('Tracked URLs') . '</h2>',
  );
  $row = 0;
  foreach ($data['urls'] as $url) {
    $percent = number_format($url['unique_clicks'] / $url['sent'], 2) * 100;
    $content['urls_table'][$row]['url'] = array(
      '#markup' => $url['url'],
    );
    $content['urls_table'][$row]['sent'] = array(
      '#markup' => $url['sent'],
    );
    $content['urls_table'][$row]['unique_clicks'] = array(
      '#markup' => $url['unique_clicks'] . ' (' . $percent . '%)',
    );
    $content['urls_table'][$row]['clicks'] = array(
      '#markup' => $url['clicks'],
    );
    $row++;
  }
  $content['#attached']['library'][] = 'mandrill_reports/google-jsapi';
  $content['#attached']['library'][] = 'mandrill_reports/reports-stats';
  $content['#attached']['drupalSettings'] = $settings;
  return $content;
}