You are here

newsletter_statistics.module in Newsletter 7.2

File

modules/statistics/newsletter_statistics.module
View source
<?php

/**
 * @file
 *
 */

/**
 * Implements hook_menu().
 */
function newsletter_statistics_menu() {
  $items = array();
  $items['admin/config/media/newsletter/statistics'] = array(
    'title' => 'Statistics',
    'description' => 'View newsletter statistics like opens and clicks.',
    'access arguments' => array(
      'access newsletter statistics',
    ),
    'weight' => 10,
  );
  $items['admin/config/media/newsletter/statistics/general'] = array(
    'title' => 'General',
    'description' => 'Watch general statistics.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'newsletter_statistics_general',
    ),
    'file' => 'includes/newsletter_statistics.admin.inc',
    'access arguments' => array(
      'access newsletter statistics',
    ),
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
  $items['admin/config/media/newsletter/statistics/graphic'] = array(
    'title' => 'Graphic',
    'description' => 'Watch advanced JQuery statistics.',
    'access arguments' => array(
      'access newsletter statistics',
    ),
    'type' => MENU_LOCAL_TASK,
    'page callback' => 'newsletter_statistics_graphic',
    'file' => 'includes/newsletter_statistics.admin.inc',
    'weight' => 1,
  );
  $items['newsletter/statistics/%newsletter_subscriber_by_hash/%newsletter'] = array(
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
    'page callback' => 'newsletter_statistics_open',
    'page arguments' => array(
      2,
    ),
    'file' => 'includes/newsletter_statistics.pages.inc',
  );
  return $items;
}

/**
 * Implements hook_permission().
 */
function newsletter_statistics_permission() {
  $permissions = array();
  $permissions['access newsletter statistics'] = array(
    'title' => t('Access newsletter statistics'),
    'description' => t('Access the newsletter statistics pages.'),
  );
  return $permissions;
}

/**
 * Implements hook_views_api().
 */
function newsletter_statistics_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'newsletter_statistics') . '/includes/views',
  );
}

/**
 * Implements hook_node_view().
 */
function newsletter_statistics_node_view($node, $view_mode, $langcode) {

  // Only add once, since this hook may run many times in a request
  static $i;
  if (isset($_GET['source']) && $_GET['source'] == 'newsletter' && !$i) {
    db_query("UPDATE {newsletter_newsletter}\n      SET clicks = clicks + 1\n      WHERE nnid = :id", array(
      ':id' => $_GET['nnid'],
    ));
    $i++;
  }
}

/**
 * Implements hook_newsletter_list_sent().
 */
function newsletter_statistics_newsletter_list_sent($message) {
  $newsletter = $message['params']['newsletter'];
  $newsletter->field_newsletter_body[LANGUAGE_NONE][0] = array(
    'format' => $message['body_format'],
    'summary' => text_summary($message['body'], $message['body_format']),
    'value' => $message['body'],
  );
  entity_get_controller('newsletter_newsletter')
    ->save($newsletter);
}

/**
 * Implements hook_form_FORM_ID_alter() for newsletter_configure_form.
 */
function newsletter_statistics_form_newsletter_configure_form_alter(&$form, &$form_state) {
  $form['settings']['newsletter_statistics_track_open_rate'] = array(
    '#type' => 'checkbox',
    '#title' => t('Track open rate'),
    '#default_value' => variable_get('newsletter_statistics_track_open_rate', FALSE),
    '#description' => t('Enable it, only if you really want the email to be tracked,
      since the method used might cause some email clients to mark your emails as spam'),
  );
}

/*
 * Returns an image to be added to newsletter body
 * so we can calculate the open rate.
 *
 * @param $hash
 *   Subscriber's personal hash.
 * @param $newsletter
 *   The newsletter object.
 *
 * @return
 *   An html image string.
 */
function newsletter_statistics_add_open_rate_image($hash, $newsletter) {
  $url = url('newsletter/statistics/' . $hash . '/' . $newsletter->nnid, array(
    'absolute' => TRUE,
  ));
  return theme('image', array(
    'path' => $url,
    'width' => '1px',
    'height' => '1px',
  ));
}