mailchimp_activity.module in Mailchimp 7.4
Same filename and directory in other branches
Module file for mailchimp_activity.
File
modules/mailchimp_activity/mailchimp_activity.moduleView source
<?php
/**
* @file
* Module file for mailchimp_activity.
*/
/**
* Implements hook_entity_info().
*/
function mailchimp_activity_entity_info() {
$return = array(
'mailchimp_activity_entity' => array(
'label' => t('Mailchimp Activity Entity'),
'plural label' => t('Mailchimp Activity Entities'),
'controller class' => 'EntityAPIControllerExportable',
'entity class' => 'MailchimpActivityEntity',
'base table' => 'mailchimp_activity_entity',
'uri callback' => 'entity_class_uri',
'fieldable' => FALSE,
'exportable' => TRUE,
'module' => 'mailchimp_activity',
'entity keys' => array(
'id' => 'mailchimp_activity_entity_id',
'name' => 'name',
'label' => 'label',
),
// Enable the entity API's admin UI.
'admin ui' => array(
'path' => 'admin/config/services/mailchimp/activity',
'file' => 'includes/mailchimp_activity.admin.inc',
'controller class' => 'MailChimpActivityUIController',
),
'label callback' => 'mailchimp_activity_entity_info_label',
'access callback' => 'mailchimp_activity_entity_access',
),
);
return $return;
}
/**
* Entity label callback.
*/
function mailchimp_activity_entity_info_label($entity, $entity_type) {
return empty($entity) ? 'New Mailchimp Activity' : $entity->label;
}
/**
* Access callback for mailchimp_activity_entity.
*/
function mailchimp_activity_entity_access() {
return mailchimp_apikey_ready_access('administer mailchimp activity');
}
/**
* Implements hook_menu().
*/
function mailchimp_activity_menu() {
$items = array();
$mailchimp_activity_entities = mailchimp_activity_load_entities();
foreach ($mailchimp_activity_entities as $mailchimp_activity_entity) {
$arg = substr_count($mailchimp_activity_entity->entity_path, '/');
$items[$mailchimp_activity_entity->entity_path . '%entity_object/mailchimp_activity'] = array(
'title' => 'Mailchimp Activity',
'load arguments' => array(
$mailchimp_activity_entity->entity_type,
),
'page callback' => 'mailchimp_activity_page',
'page arguments' => array(
$arg,
$mailchimp_activity_entity,
),
'access callback' => 'mailchimp_activity_access',
'access arguments' => array(
$mailchimp_activity_entity,
),
'type' => MENU_LOCAL_TASK,
);
}
return $items;
}
/**
* Access callback for activity menu items.
*/
function mailchimp_activity_access(MailchimpActivityEntity $mailchimp_activity_entity) {
if ($mailchimp_activity_entity->enabled && user_access('access mailchimp activity')) {
return TRUE;
}
return FALSE;
}
/**
* Loads a single or multiple instances of MailChimpActivityEntity.
*
* @param string $name
* Optional name of the MailChimpActivityEntity instance to load.
*
* @return mixed
* Array of MailchimpActivityEntity instances or one instance if $name is set.
*/
function mailchimp_activity_load_entities($name = NULL) {
$types = entity_load_multiple_by_name('mailchimp_activity_entity', isset($name) ? array(
$name,
) : FALSE);
return isset($name) ? reset($types) : $types;
}
/**
* Get the Mailchimp member activity for a given email address and list.
*
* Results are cached in the cache_mailchimp_user bin which is cleared by the
* Mailchimp web hooks system when needed.
*
* @param string $list_id
* The Mailchimp list to get activity for.
* @param string $email
* The Mailchimp user email address to get activity for.
* @param bool $reset
* Set to TRUE if member activity should not be loaded from cache.
*
* @return array
* Associative array of Mailchimp member activity.
*/
function mailchimp_activity_get_member_activity($list_id, $email, $reset = FALSE) {
$cache = $reset ? NULL : cache_get("activity_{$list_id}_{$email}", 'cache_mailchimp');
$memberactivity = array();
// Return cached lists:
if ($cache && isset($cache->data)) {
$memberactivity = $cache->data;
}
else {
/* @var \Mailchimp\MailchimpLists $mc_lists */
$mc_lists = mailchimp_get_api_object('MailchimpLists');
try {
if (!$mc_lists) {
throw new MailchimpException('Cannot get member activity without Mailchimp API. Check API key has been entered.');
}
$result = $mc_lists
->getMemberActivity($list_id, $email);
if ($result->total_items > 0) {
$memberactivity = $result->activity;
cache_set('activity_' . $list_id . '_' . $email, $memberactivity, 'cache_mailchimp', CACHE_TEMPORARY);
}
} catch (Exception $e) {
drupal_set_message($e
->getMessage(), 'error');
watchdog('mailchimp_activity', 'An error occurred while getting activity for email "%email": %message', array(
'%email' => $email,
'%message' => $e
->getMessage(),
), WATCHDOG_ERROR);
return NULL;
}
}
return $memberactivity;
}
/**
* Content for the mailchimp log tab on entity instance pages.
*
* @param object $entity
* The entity this page is being generated for.
* @param MailchimpActivityEntity $mailchimp_activity_entity
* The MailChimpActivityEntity instance for this page.
*
* @return array
* Render array for the activity page.
*/
function mailchimp_activity_page($entity, MailchimpActivityEntity $mailchimp_activity_entity) {
$entity_wrapper = entity_metadata_wrapper($mailchimp_activity_entity->entity_type, $entity);
$email_property = $mailchimp_activity_entity->email_property;
$email_property_array = explode(':', $email_property);
$parent = $entity_wrapper;
foreach ($email_property_array as $drupal_field) {
if ($parent instanceof EntityListWrapper) {
$child_wrapper = $parent
->get(0)->{$drupal_field};
}
else {
$child_wrapper = $parent->{$drupal_field};
}
$parent = $child_wrapper;
}
$email = $parent
->value();
// Validate email address.
if (!valid_email_address($email)) {
return array(
'error_notice' => array(
'#markup' => t('%email does not contain a valid email address. Unable to lookup Mailchimp activity history without a valid email.', array(
'%email' => $email_property,
)),
),
);
}
$header = array(
t('Campaign'),
t('Action'),
t('Date & Time'),
);
$rows = array();
// Loop through all activities, creating rows for each:
$user_activity = mailchimp_activity_get_all_activity($email);
/* @var \Mailchimp\MailchimpCampaigns $mc_campaigns */
$mc_campaigns = mailchimp_get_api_object('MailchimpCampaigns');
// TODO: Campaign limit is set high because all campaigns need to be
// retrieved here. This function should be refactored to be more efficient.
$result = $mc_campaigns
->getCampaigns(array(
'count' => 500,
));
$campaigns = $result->total_items > 0 ? $result->campaigns : array();
$campaign_index = array();
foreach ($campaigns as $campaign) {
$campaign_index[$campaign->id] = $campaign;
}
if (!empty($user_activity)) {
foreach ($user_activity as $list_activity) {
$rows[] = array(
'no_striping' => TRUE,
'data' => array(
array(
'data' => '<strong>List: ' . $list_activity['list']->name . '</strong>',
'colspan' => count($header),
'style' => 'text-align:center',
),
),
);
if (!empty($list_activity['activity'])) {
foreach ($list_activity['activity'] as $activity) {
if (!empty($activity->campaign_id)) {
$title = array(
'data' => array(
'#type' => 'link',
'#title' => $campaign_index[$activity->campaign_id]->settings->title,
'#href' => $campaign_index[$activity->campaign_id]->archive_url,
),
);
}
else {
$title = $activity->title;
}
$rows[] = array(
$title,
$activity->action,
$activity->timestamp,
);
}
}
else {
$rows[] = array(
'no_striping' => TRUE,
'data' => array(
array(
'data' => 'No activity yet.',
'colspan' => count($header),
'style' => 'text-align:center',
),
),
);
}
}
}
$display['mailchimp_activity'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
);
return $display;
}
/**
* Return all activity on all lists for a given email address.
*
* @param string $email
* The email address to get activity for.
*
* @return array
* Array of Mailchimp activity for the email address.
*/
function mailchimp_activity_get_all_activity($email) {
$all_activity = array();
$lists = mailchimp_get_lists_for_email($email);
foreach ($lists as $list) {
$all_activity[$list->id] = array(
'list' => $list,
'activity' => mailchimp_activity_get_member_activity($list->id, $email),
);
}
return $all_activity;
}
/**
* Implements hook_permission().
*/
function mailchimp_activity_permission() {
$return = array();
$return['access mailchimp activity'] = array(
'title' => t('Access Mailchimp activity'),
'description' => t('View own Mailchimp activity history.'),
);
$return['administer mailchimp activity'] = array(
'title' => t('Administer Mailchimp activity entities'),
'description' => t('Add, Delete, and Configure Mailchimp Activity entity settings.'),
);
return $return;
}
Functions
Name | Description |
---|---|
mailchimp_activity_access | Access callback for activity menu items. |
mailchimp_activity_entity_access | Access callback for mailchimp_activity_entity. |
mailchimp_activity_entity_info | Implements hook_entity_info(). |
mailchimp_activity_entity_info_label | Entity label callback. |
mailchimp_activity_get_all_activity | Return all activity on all lists for a given email address. |
mailchimp_activity_get_member_activity | Get the Mailchimp member activity for a given email address and list. |
mailchimp_activity_load_entities | Loads a single or multiple instances of MailChimpActivityEntity. |
mailchimp_activity_menu | Implements hook_menu(). |
mailchimp_activity_page | Content for the mailchimp log tab on entity instance pages. |
mailchimp_activity_permission | Implements hook_permission(). |