You are here

function mailchimp_campaign_stats_page in Mailchimp 7.4

Same name and namespace in other branches
  1. 7.5 modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_stats_page()
  2. 7.2 modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_stats_page()
  3. 7.3 modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_stats_page()

Page callback for a campaign's statistics.

Parameters

MailChimpCampaign $campaign: The Mailchimp campaign instance.

Return value

array A renderable array for the campaign stats page.

1 string reference to 'mailchimp_campaign_stats_page'
mailchimp_campaign_menu in modules/mailchimp_campaign/mailchimp_campaign.module
Implements hook_menu().

File

modules/mailchimp_campaign/mailchimp_campaign.module, line 760
Module file for mailchimp_campaign.

Code

function mailchimp_campaign_stats_page(MailChimpCampaign $campaign) {

  /* @var \Mailchimp\MailchimpReports $mc_reports */
  $mc_reports = mailchimp_get_api_object('MailchimpReports');
  $result = NULL;
  try {
    if (!$mc_reports) {
      throw new MailchimpException('Cannot get campaign stats without Mailchimp API. Check API key has been entered.');
    }
    $result = $mc_reports
      ->getCampaignSummary($campaign->mc_campaign_id);
  } catch (Exception $e) {
    drupal_set_message($e
      ->getMessage(), 'error');
    watchdog('mailchimp_campaign', 'An error occurred getting report data from Mailchimp: %message', array(
      '%message' => $e
        ->getMessage(),
    ), WATCHDOG_ERROR);
    return NULL;
  }

  // Tabular summary:
  $rows = array(
    array(
      t('Emails sent'),
      $result->emails_sent,
    ),
    array(
      t('Abuse reports'),
      $result->abuse_reports,
    ),
    array(
      t('Unsubscribed'),
      $result->unsubscribed,
    ),
  );
  $stat_groups = array(
    'bounces',
    'forwards',
    'opens',
    'clicks',
    'facebook_likes',
    'list_stats',
  );
  foreach ($stat_groups as $group) {
    $rows[] = array(
      'data' => array(
        array(
          'data' => '<strong>' . drupal_ucfirst(str_replace('_', ' ', $group)) . '</strong>',
          'colspan' => 2,
        ),
      ),
    );
    foreach ($result->{$group} as $key => $stat) {
      $rows[] = array(
        $key,
        drupal_ucfirst(str_replace('_', ' ', $stat)),
      );
    }
  }

  // Time series chart data:
  $settings = array();
  foreach ($result->timeseries as $series) {
    $settings['mailchimp_campaign']['stats'][] = array(
      'timestamp' => $series->timestamp,
      'emails_sent' => $series->emails_sent,
      'unique_opens' => $series->unique_opens,
      'recipients_click' => $series->recipients_clicks,
    );
  }
  $render = array(
    '#attached' => array(
      'js' => array(
        array(
          'data' => 'https://www.google.com/jsapi',
          'type' => 'external',
        ),
        drupal_get_path('module', 'mailchimp_campaign') . '/js/mailchimp_campaign.js',
        array(
          'data' => $settings,
          'type' => 'setting',
        ),
      ),
    ),
    'charts' => array(
      '#prefix' => '<h2>' . t('Hourly stats for the first 24 hours of the campaign') . '</h2>',
      '#markup' => '<div id="mailchimp-campaign-chart"></div>',
    ),
    'overview' => array(
      '#prefix' => '<h2>' . t('Other campaign metrics') . '</h2>',
      '#theme' => 'table',
      '#rows' => $rows,
      '#header' => array(
        t('Key'),
        t('Value'),
      ),
    ),
  );
  return $render;
}