'Outgoing Mail log entries',
'description' => 'View Mails that have been sent from this site.',
'page callback' => 'mail_logger_overview',
'access arguments' => array('access mail logger'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/reports/mail-logger/mail/%'] = array(
'title' => 'Outgoing Mail log entries',
'description' => 'View information about a single logged mail entry',
'page callback' => 'mail_logger_read_mail',
'page arguments' => array(4),
'access arguments' => array('access mail logger'),
'type' => MENU_CALLBACK,
);
return $items;
}
function mail_logger_theme() {
return array(
'mail_logger_read_mail' => array(
'arguments' => array('mlid' => NULL),
),
);
}
function mail_logger_read_mail($id) {
if (!isset($id) || !is_numeric($id)) {
return 'Invalid Mail Logger ID parameter';
}
elseif ($result = db_query_range('SELECT * FROM {mail_logger} WHERE mlid = %d', $id, 0, 1)) {
drupal_add_css(drupal_get_path('module', 'mail_logger') .'/mail_logger.css');
return theme('mail_logger_read_mail', db_fetch_object($result));
}
else {
return 'No Mail Logger record found with id '. $id;
}
}
function theme_mail_logger_read_mail($mail) {
$output = '';
$output .= '
';
$output .= '
Mail Type:
'. $mail->mailkey .'
';
$output .= '
Date Sent:
'. format_date($mail->date_sent, 'small') .'
';
$output .= '
From:
'. $mail->from .'
';
$output .= '
To:
'. $mail->to .'
';
$output .= '
Subject:
'. $mail->subject .'
';
$output .= '
Body:
'. nl2br($mail->body) .'
';
$output .= '
';
return $output;
}
/**
* Implementation of hook_mail_alter().
*
* Purpose of this function is to log all outgoing mail
*/
function mail_logger_mail_alter(&$message) {
//this line taken from mail.inc:drupal_mail()
$message['body'] = is_array($message['body']) ? drupal_wrap_mail(implode("\n\n", $message['body'])) : drupal_wrap_mail($message['body']);
$args = array(
$message['id'],
$message['to'],
$message['subject'],
$message['body'],
$message['from'],
serialize($message['headers']),
time(),
$message['language']->language,
);
db_query("INSERT INTO {mail_logger} (
`mlid` , `mailkey` , `to` , `subject` , `body` , `from` , `headers`, `date_sent`, `language`
) VALUES (
NULL, '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s' )", $args);
}
/**
* Returns types of mailkeys in mail_logger table
*
*/
function _mail_logger_get_mailkey_types() {
$types = array();
$result = db_query('SELECT DISTINCT(mailkey) FROM {mail_logger} ORDER BY mailkey');
while ($object = db_fetch_object($result)) {
$types[] = $object->mailkey;
}
return $types;
}
function mail_logger_form_overview() {
$names['all'] = t('all mail types');
foreach (_mail_logger_get_mailkey_types() as $type) {
$names[$type] = t('!type', array('!type' => t($type)));
}
if (empty($_SESSION['mail_logger_overview_filter'])) {
$_SESSION['mail_logger_overview_filter'] = 'all';
}
$form['filter'] = array(
'#type' => 'select',
'#title' => t('Filter by Mailkey'),
'#options' => $names,
'#default_value' => $_SESSION['mail_logger_overview_filter']
);
$form['submit'] = array('#type' => 'submit', '#value' => t('Filter'));
$form['#redirect'] = FALSE;
return $form;
}
/**
* hook_submit for mail_logger_form_overview
*
*/
function mail_logger_form_overview_submit($form, &$form_state) {
$_SESSION['mail_logger_overview_filter'] = $form_state['values']['filter'];
}
/**
* theme function for mail_logger_form_overview
*
*/
function theme_mail_logger_form_overview($form) {
return ''. drupal_render($form) .'
';
}
function theme_mail_logger_clear_form($form) {
return '';
}
/**
* Menu callback; displays a listing of log mails.
*/
function mail_logger_overview() {
$output = drupal_get_form('mail_logger_form_overview');
$output .= drupal_get_form('mail_logger_clear_form');
$header = array(
array('data' => t('Date Sent'), 'field' => 'ml.date_sent', 'sort' => 'desc'),
array('data' => t('Mailkey'), 'field' => 'ml.mailkey'),
array('data' => t('Language'), 'field' => 'ml.language'),
array('data' => t('To'), 'field' => 'ml.to'),
array('data' => t('From'), 'field' => 'ml.from'),
array('data' => t('Subject'), 'field' => 'ml.subject'),
);
$tablesort = tablesort_sql($header);
$sql = "SELECT ml.mlid, ml.mailkey, ml.language, ml.to, ml.from, ml.subject, ml.date_sent FROM {mail_logger} ml";
$type = $_SESSION['mail_logger_overview_filter'];
if ($type != 'all') {
$result = pager_query($sql ." WHERE ml.mailkey = '%s'". $tablesort, 50, 0, NULL, $type);
}
else {
$result = pager_query($sql . $tablesort, 50);
}
$rows = array();
while ($mail_logger = db_fetch_object($result)) {
$rows[] = array('data' =>
array(
// Cells
format_date($mail_logger->date_sent, 'small'),
$mail_logger->mailkey,
$mail_logger->language,
$mail_logger->to,
$mail_logger->from,
l(truncate_utf8($mail_logger->subject, 56, TRUE, TRUE), 'admin/reports/mail-logger/mail/'. $mail_logger->mlid ),
),
);
}
if (!$rows) {
$rows[] = array(array('data' => t('No log messages available.'), 'colspan' => 6));
}
$output .= theme('table', $header, $rows);
$output .= theme('pager', NULL, 50, 0);
return $output;
}
/*
* clear log
*
*/
function mail_logger_clear_form($form_state) {
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Clear log'));
$form['#redirect'] = FALSE;
return $form;
}
function mail_logger_clear_form_submit($form, &$form_state) {
db_query('TRUNCATE TABLE {mail_logger}');
drupal_set_message(t('Mail log cleared.'));
}